java8中Lambda表达式简单使用:
java8正序、倒序排序、list集合转map
实体类:
@Data
class Apple{
private String id; //苹果id
private String productDate; //生产日期
private BigDecimal price; //价格
}
测试:
List appleList = new ArrayList<>();
Apple apple1 = new Apple();
apple1.setId("1");
apple1.setProductDate("2020-04-12");
apple1.setPrice(new BigDecimal(5500));
Apple apple2 = new Apple();
apple2.setId("2");
apple2.setProductDate("2020-04-10");
apple2.setPrice(new BigDecimal(5000));
Apple apple3 = new Apple();
apple3.setId("3");
apple3.setProductDate("2020-04-11");
apple3.setPrice(new BigDecimal(6500));
appleList.add(apple1);
appleList.add(apple2);
appleList.add(apple3);
1.正序:
appleList = appleList.stream().sorted(Comparator.comparing(Apple::getProductDate)).collect(Collectors.toList());
System.out.println(appleList); //打印
运行结果:
[Apple(id=2, productDate=2020-04-10, price=5000), Apple(id=3, productDate=2020-04-11, price=6500), Apple(id=1, productDate=2020-04-12, price=5500)]
2.倒序:
appleList = appleList.stream().sorted(Comparator.comparing(Apple::getProductDate).reversed()).collect(Collectors.toList());
System.out.println(appleList); //打印
运行结果:
[Apple(id=1, productDate=2020-04-12, price=5500), Apple(id=3, productDate=2020-04-11, price=6500), Apple(id=2, productDate=2020-04-10, price=5000)]
3.根据某个字段list集合转map
这里我进行list转map,去掉重复的key值,value为list
Apple apple4 = new Apple();
apple4.setId("4");
apple4.setProductDate("2020-04-12");
apple4.setPrice(new BigDecimal(7500));
appleList.add(apple4);
Map> map = appleList.stream().
collect(Collectors.groupingBy(Apple::getProductDate));
System.out.println(map);
运行结果:
{2020-04-12=[Apple(id=1, productDate=2020-04-12, price=5500), Apple(id=4, productDate=2020-04-12, price=7500)], 2020-04-11=[Apple(id=3, productDate=2020-04-11, price=6500)], 2020-04-10=[Apple(id=2, productDate=2020-04-10, price=5000)]}
4.过滤
过滤出productDate和price条件
appleList = appleList.parallelStream().filter(apple -> apple.getProductDate()=="2020-04-12" && 7500 == apple.getPrice().intValue()).collect(Collectors.toList());
System.out.println(appleList);
运行结果:
[Apple(id=4, productDate=2020-04-12, price=7500)]
5.limit
appleList = appleList.parallelStream().limit(1).filter(apple -> apple.getProductDate()=="2020-04-12" ).collect(Collectors.toList());
System.out.println(appleList);
运行结果:
[Apple(id=1, productDate=2020-04-12, price=5500)]
6.遍历
System.out.println(appleList); //打印
运行结果:
[Apple(id=1, productDate=2020-04-12, price=5500), Apple(id=2, productDate=2020-04-10, price=5000), Apple(id=3, productDate=2020-04-11, price=6500), Apple(id=4, productDate=2020-04-12, price=7500)]
appleList.stream().forEach(apple -> {
System.out.println(apple);
});
运行结果:
Apple(id=1, productDate=2020-04-12, price=5500)
Apple(id=2, productDate=2020-04-10, price=5000)
Apple(id=3, productDate=2020-04-11, price=6500)
Apple(id=4, productDate=2020-04-12, price=7500)
7.字符串过滤和拼接
List strings = Arrays.asList("abc", "", "ab", "def", "gh","i", "efg");
strings = strings.stream().filter(string -> !string.isEmpty()).collect(Collectors.toList());
System.out.println(strings);
运行结果:
[abc, ab, def, gh, i, efg]
//拼接
String splicing = strings.stream().filter(string -> !string.isEmpty()).collect(Collectors.joining("-"));
System.out.println(splicing);
运行结果:
abc-ab-def-gh-i-efg