四时宝库

程序员的知识宝库

java8 Stream使用(stream 官网)

@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
 */
}

发表评论:

控制面板
您好,欢迎到访网站!
  查看权限
网站分类
最新留言
    友情链接