Java8 stream一些用法

    技术2022-07-15  48

    1、map、reduce的用法

    List<TestsObject> list = new ArrayList<TestsObject>(); TestsObject object1 = new TestsObject(1,"tom","beijing",12,20.8); list.add(object1); TestsObject object2 = new TestsObject(2,"jack","shanghai",15,21.8); list.add(object2); TestsObject object3 = new TestsObject(3,"lose","guangzhou",18,33.8); list.add(object3); TestsObject object4 = new TestsObject(4,"alise","beijing",23,13.8); list.add(object4); TestsObject object5 = new TestsObject(5,"bob","shanghai",10,34.8); list.add(object5); //1、求和 map-reduce Optional<Double> optional = list.stream().map(TestsObject::getScore).reduce((a,b) -> a + b); if (optional.isPresent()) { Double scoreDouble = optional.get(); System.out.println(scoreDouble); } //2、求和 DoubleStream mapToDouble = list.stream().mapToDouble(TestsObject::getScore); double sum = mapToDouble.sum(); System.out.println("sum="+sum); //1、求平均值 double avg = list.stream().mapToDouble(TestsObject::getScore).average().getAsDouble(); System.out.println("avg="+avg); //map用法 List<Integer> list2 = list.stream().map(TestsObject::getAge).map(t -> t - 1).collect(Collectors.toList()); //map用法 list = list.stream().map(t -> { t.setAge(11); return t; }).collect(Collectors.toList());

    2、flatMap的用法 案例一:

    List<String> words = Arrays.asList("hello c++","hello java","hello python"); //把集合用的元素按空格切割,成一个数组 Stream<String[]> stream = words.stream().map(word -> word.split(" ")); //利用flatMap把数组转换为集合类型,并对元素去重 List<String> resultList = stream.flatMap(Arrays::stream).distinct().collect(Collectors.toList()); for (String string : resultList) { System.out.println(string); }

    案例二:

    List<String> hobby1 = Arrays.asList("java","c","音乐"); User user1 = new User(1, "zhangsan", hobby1); List<String> hobby2 = Arrays.asList("c++","c","游戏"); User user2 = new User(2, "lisi", hobby2); //集合元素中还有集合 List<User> list = new ArrayList<User>(2); list.add(user1); list.add(user2); //利用flatMap取出集合中的集合的元素并去重 Stream<String> stream = list.stream().map(User::getHobby).flatMap(Collection::stream); List<String> list2 = list.stream().map(User::getHobby).flatMap(Collection::stream).distinct().collect(Collectors.toList()); list2.forEach(t -> { System.out.println(t); });

    虽然写的很粗糙,但是很常用!浏览到此篇文章的小伙伴,希望会对你们有帮助!

    Processed: 0.015, SQL: 9