javaLambda表达式在集合中的运用
/**
* 使用Lambda表达式在集合中的运用
*/
public class TestLambda4 {
public static void main(String[] args) {
List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
list.add(4);
for (int i :
list) {
System.out.print(i+", ");
}
//使用for-each遍历
//结果为:1, 2, 3, 4,
System.out.println();
list.forEach(new Consumer<Integer>() {
//使用集合的forEach(Consumer<?> action)方法遍历,consumer消费者,Consumer接口为函数式接口
@Override
public void accept(Integer integer) {
//list.forEach(Consumer)方法会将每个元素传给 Consumer的accept()方法,在accept()方法中规定要对遍历的元素进行什么操作
System.out.print(integer+", ");
}
});
//结果为:1, 2, 3, 4,
//作用同for(){},只是将{}的内容放到了Consumer实现类的accept()方法中
System.out.println();
list.forEach(a->{
System.out.print(a+", ");
});
//.forEach(Consumer<?> action)的()中直接写表达式()->{},即形参Consumer<?> action = ()->{}
//accept(T)方法是有参数的,所以用(a)代表参数,{}内用有参的print(a)
//结果为:1, 2, 3, 4,
System.out.println();
list.forEach(System.out::print);
//进一步简写,引用System.out对象的print(a)方法实现Consumer接口的accept(a)方法
//结果为:1234
System.out.println();
List<String> sts = new ArrayList<>();
sts.add("a");
sts.add("b");
sts.add("c");
sts.add("b");
sts.forEach(System.out::print);
//abcb
System.out.println();
//通常删除元素
// for (Iterator<String> it = sts.iterator();it.hasNext();){
// if ("b".equals(it.next())){
// it.remove();
// }
// }
// sts.forEach(System.out::print);
// //结果:ac
// System.out.println();
// sts.removeIf(new Predicate<String>() {
// //集合的.removeIf(Predicate<?> filter)方法,predicate谓语filter筛选,Predicate接口为函数式接口
// @Override
// public boolean test(String s) {
// //.test()将集合中的每个元素传进来,执行方法体,符合条件返回true删除该元素
// return "b".equals(s);
// }
// });
// sts.forEach(System.out::print);
// //结果:ac
// System.out.println();
// sts.removeIf(s->"b".equals(s));
//参数->方法 test()方法需要一个参数并且返回boolean,equals()方法需要一个参数并且返回boolean
sts.removeIf("b"::equals);
//简写为 对象"b" :: 方法equals
sts.forEach(System.out::print);
//结果:ac
System.out.println();
}
}
class TestLambda5{
//创建容器的元素
String st;
public TestLambda5(String st) {
this.st = st;
}
@Override
public String toString() {
return st;
}
public static void main(String[] args) {
List<TestLambda5> t5 = new ArrayList<>();
t5.add(new TestLambda5("d"));
t5.add(new TestLambda5("b"));
t5.add(new TestLambda5("c"));
t5.add(new TestLambda5("a"));
// t5.sort(new Comparator<TestLambda5>() {
// @Override
// public int compare(TestLambda5 o1, TestLambda5 o2) {
// return o1.st.compareTo(o2.st);
// }
// });
// //使用比较器Comparator
// t5.forEach(System.out::print);
// //结果:abcd
// System.out.println();
t5.sort((o1,o2)->o1.st.compareTo(o2.st));
t5.forEach(t-> System.out.print(t.st));
//结果为:abcd
//compareTo方法属于形参o1/o2,不能改写成o1::compareTo的形式
}
}