【Java】【6】JDK8 Stream操作整理
摘要:
1,List<EntityOld>转换为List<EntityNew>
正文:
1,List<EntityOld>转换为List<EntityNew>
List<EntityOld> list = oldList; List<EntityNew> newList = list.stream().map(EntityNew::new).collect(Collectors.toList());
List<EntityOld> list = oldList; List<String> idList = list.stream().map(EntityOld::getOldId).collect(Collectors.toList());
普通for循环:
List<Student> list = new ArrayList<>(); //Student1: name:张三;age:18 //Student2: name:张三;age:20 List<StudentVo> newList = new ArrayList<>(); list.stream().forEach(item -> { if (item.getAge() > 18) { StudentVo info = new StudentVo(); info.setName(item.getName()); newList.add(info); } });
加filter:
//超过18岁 List<Student> newList = list.stream().filter(i -> this.checkAgeOver18(i.getAge())).collect(Collectors.toList()); private Boolean checkAgeOver18 (int age) { return age > 18; } //简化版,但是条件复杂的话最好就封装成一个方法了 List<Student> newList = list.stream().filter(i -> i.getAge() > 18).collect(Collectors.toList());
List<Integer> numbers = Arrays.asList(3, 2, 2, 3, 7, 3, 5); IntSummaryStatistics stats = numbers.stream().mapToInt((x) -> x).summaryStatistics(); System.out.println("所有数之和 : " + stats.getSum()); System.out.println("列表中最大的数 : " + stats.getMax()); System.out.println("列表中最小的数 : " + stats.getMin()); System.out.println("平均数 : " + stats.getAverage());
List<Student> list = new ArrayList<>(); //Student1: name:张三;age:18 //Student2: name:张三;age:20 Integer result = list.stream().collect(Collectors.summingInt(Student::getAge)); System.out.println("所有学生年龄之和 : " + reuslt);
List<Fruit> fruitList = Lists.newArrayList(new Fruit("apple", 6),new Fruit("apple", 6), new Fruit("banana", 7), new Fruit("banana", 7), new Fruit("banana", 7), new Fruit("grape",8)); Map<String, List<Fruit>> groupMap = fruitList.stream().collect(Collectors.groupingBy(Fruit::getName));
//输出结果是{banana=3, apple=2, grape=1} Map<String, Long> map = fruitList.stream().collect(Collectors.groupingBy(Fruit::getName,Collectors.counting()));
//根据name字段倒排 List<Fruit> list = fruitList.stream().sorted(Comparator.comparing(Fruit::getName).reversed()).collect(Collectors.toList());
//equalsIgnoreCase:不考虑大小写;find.isPresent()可用来判断数据是否存在 Optional<Fruit> find = fruitList.stream().filter(i -> i.getName().equalsIgnoreCase("apple")).findFirst();
补充:
1,List<EntityOld>转换为List<EntityNew>
注意:实体类EntityNew中需要有一个EntityOld的转换方法
EntityNew.java
public class EntityNew { private String newId; private String avatar; //转换方法* public EntityNew (EntityOld item) { this.newId = item.getOldId() == null ? "" : item.getOldId(); } public String getNewId() { return newId; } public void setNewId(String newId) { this.newId = newId; } public String getAvatar() { return avatar; } public void setAvatar(String avatar) { this.avatar = avatar; } }
EntityOld.java
public class EntityOld { private String oldId; private String oldName; public String getOldId() { return oldId; } public void setOldId(String oldId) { this.oldId = oldId; } public String getOldName() { return oldName; } public void setOldName(String oldName) { this.oldName = oldName; } }