@Test public void testThread() throws IOException { List<User> list = new ArrayList<>(); List<User> list1 = new ArrayList<>(); User user = new User(); user.setId(new Long("10")); user.setAge(10); user.setBalance(new BigDecimal(10)); user.setName("xiaoming"); user.setUsername("xiaoming"); User user1 = new User(); user1.setId(new Long("20")); user1.setAge(20); user1.setBalance(new BigDecimal(20)); user1.setName("zhangsan"); user1.setUsername("zhangsan"); list.add(user); list.add(user1); //将用户年龄小于10岁的,的集合遍历出来 List<User> collect = list.stream().filter(user2 -> user2.getAge() <= 10).collect(Collectors.toList()); //将用户年龄小于10岁的,的集合遍历出来 转为map集合,key为id,value 名称 Map<Long, String> userMap = list.stream().filter(user2 -> user2.getAge() <= 10).collect(Collectors.toMap(User::getId, User::getName)); userMap.forEach((key, value) -> { System.out.println("主键为:" + key + ";名称为:" + value); }); //集合遍历出来 转为map集合,key为id,value 名称 Map result = list.stream().collect(HashMap::new, (map, p) -> map.put(p.getId(), JSON.toJSON(p)), Map::putAll); result.forEach((key, value) -> { System.out.println("主键为:" + key + ";名称为:" + value); }); List<Integer> strs = new ArrayList<>(); strs.add(111); strs.add(222); //list转字符串,并且转为大写 StringBuffer collect2 = Stream.of("aaa", "bbb", "ccc").collect(StringBuffer::new, (str, p) -> { str.append(p.toUpperCase()).append(","); }, StringBuffer::append); System.out.println(collect2); //list 转list<map> List<Map<String, Object>> personToMap = list.stream().collect(ArrayList::new, (list3, p) -> { Map<String, Object> map = new HashMap<>(); map.put("name", p.getName()); map.put("age", p.getAge()); map.put("id", p.getId()); list3.add(map); }, List::addAll); System.out.println(JSON.toJSONString(personToMap)); //list转为字符串 List<String> webs = Arrays.asList("voidcc.com", "voidmvn.com", "voidtool.com"); String allwebs = webs.stream().collect(Collectors.joining(",")); System.out.println(allwebs); //查询年龄大于10并且根据年龄分组 //groupingBy 根据年龄来分组: Map<Integer, List<User>> groupAge = list.stream().filter(p -> p.getAge() >= 10).collect(Collectors.groupingBy(p -> p.getAge(), Collectors.toList())); System.out.println(JSON.toJSONString(groupAge)); //groupingBy 根据年龄分组,年龄对应的键值List存储的为Person的姓名: //mapping即为对各组进行投影操作,和Stream的map方法基本一致。 Map<Integer, List<String>> collect1 = list.stream().collect(Collectors.groupingBy(p -> p.getAge(), Collectors.mapping((User p) -> p.getName(), Collectors.toList()))); //打印结果:{20:["zhangsan"],10:["xiaoming"]} System.out.println(JSON.toJSONString(collect1)); //groupingBy 根据姓名分组,获取每个姓名下人的年龄总和: Map sumAgeByName = list.stream().collect(Collectors.groupingBy(p -> p.getName(), Collectors.reducing(0, (User p) -> p.getAge(), Integer::sum))); /* 或者使用summingInt方法 */ sumAgeByName = list.stream().collect(Collectors.groupingBy(p -> p.getName(), Collectors.summingInt((User p) -> p.getAge()))); //打印结果:{"xiaoming":10,"zhangsan":20} System.out.println(JSON.toJSONString(sumAgeByName)); String strJoin = Stream.of("1", "2", "3", "4") .collect(Collectors.joining(",", "[", "]")); System.out.println("strJoin: " + strJoin); // 打印结果 // strJoin: [1,2,3,4] //字符串连接 String phrase = list .stream() .filter(p -> p.getAge() >= 10) .map(p -> p.getName()) .collect(Collectors.joining(" and ", "[", " ]")); //打印结果 [xiaoming and zhangsan ] System.out.println(phrase); /** * 使用collect可以将Stream转换成值。maxBy和minBy允许用户按照某个特定的顺序生成一个值。 averagingDouble:求平均值,Stream的元素类型为double averagingInt:求平均值,Stream的元素类型为int averagingLong:求平均值,Stream的元素类型为long counting:Stream的元素个数 maxBy:在指定条件下的,Stream的最大元素 minBy:在指定条件下的,Stream的最小元素 reducing: reduce操作 summarizingDouble:统计Stream的数据(double)状态,其中包括count,min,max,sum和平均。 summarizingInt:统计Stream的数据(int)状态,其中包括count,min,max,sum和平均。 summarizingLong:统计Stream的数据(long)状态,其中包括count,min,max,sum和平均。 summingDouble:求和,Stream的元素类型为double summingInt:求和,Stream的元素类型为int summingLong:求和,Stream的元素类型为long */ }