本文参考:
https://www.cnblogs.com/pu20065226/p/11477617.html(sort)
https://www.cnblogs.com/psyco/p/10593205.html(forEach)
https://www.jianshu.com/p/a88303c70eb3(map)
https://blog.csdn.net/qq_41868790/article/details/89232878(filter)
一、sort
1.排序的两种方式
List<UserObj> userObjs = Lists.newArrayList(
new UserObj("aa",9,70),
new UserObj("aa",2,50),
new UserObj("aa",6,60),
new UserObj("ee",3,80),
new UserObj("dd",5,70),
new UserObj("ee",6,99),
new UserObj("ff",9,73)
);
userObjs.sort(((o1, o2) -> o1.getAge() - o2.getAge()));
userObjs.sort((Comparator.comparingInt(UserObj::getAge)));
userObjs.forEach(System.out::println);
2.倒序
在比较器后面增加reversed即可,链式调用是java8的风格之一
userObjs.sort((Comparator.comparingInt(UserObj::getAge)).reversed())
3.链式调用
userObjs.sort(Comparator.comparing(UserObj::getName)
.thenComparing(UserObj::getAge)
.thenComparing(UserObj::getCredits)
);
二、forEach
1.Java8遍历Map
Map<String, Integer> items = new HashMap<>();
items.put("A", 10);
items.put("B", 20);
items.put("C", 30);
items.put("D", 40);
items.put("E", 50);
items.put("F", 60);
items.forEach((k,v)->System.out.println("Item : " + k + " Count : " + v));
items.forEach((k,v)->{
System.out.println("Item : " + k + " Count : " + v);
if("E".equals(k)){
System.out.println("Hello E");
}
});
2.Java8遍历List
List<String> items = new ArrayList<>();
items.add("A");
items.add("B");
items.add("C");
items.add("D");
items.add("E");
//lambda
//Output : A,B,C,D,E
items.forEach(item->System.out.println(item));
//Output : C
items.forEach(item->{
if("C".equals(item)){
System.out.println(item);
}
});
//method reference
//Output : A,B,C,D,E
items.forEach(System.out::println);
三、map
map是转化的意思,大小写转化,数字转平方都可以用map
将一个类转化为另一个类,将一个对象转化成其某个属性值都可。
List<Animal> animals = Lists.newArrayList ();
animals.add (new Animal ("cat",12));
animals.add (new Animal ("dog",20));
animals.add (new Animal ("wolf",5));
List<String> aname = animals.stream().map(t -> t.getName()).collect(Collectors.toList());
aname.forEach(System.out::println);
List<Toy> collect = animals.stream().map(t -> {
Toy toy = new Toy();
toy.setName(t.getName());
return toy;
}).collect(Collectors.toList());
collect.forEach(System.out::println);
peek和map的区别
总结:peek接收一个没有返回值的λ表达式,可以做一些输出,外部处理等。map接收一个有返回值的λ表达式,之后Stream的泛型类型将转换为map参数λ表达式返回的类型
四、filter
filter的使用方式为: filter(item -> item的逻辑判断 ) ,其中filter会保留判断条件为true的记录
List<Integer> list = new ArrayList<>();
for (int i = 0; i < 10; i++) {
list.add(i);
}
list.stream().filter(t->t %2 == 0).collect(Collectors.toList()).forEach(System.out::println);
list.stream().filter(t->{
return t %2 == 1;
}).collect(Collectors.toList()).forEach(System.out::println);