java8 stream流操作


// 利用stream流中的TreeSet去重
		List<ResourceTaskWhiteListVo> distinctWhiteList = whiteListVoList.stream()
				.collect(Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(o -> o.getEnv() + "|" + o.getShortName() + "|" + o.getSoftwareType() + "|" + o.getInstanceCode() ))), ArrayList::new));

// 获取空字符串的数量
        List<String> strings1 = Arrays.asList("abc", "", "bc", "efg", "abcd","", "jkl");
        long count = strings1.parallelStream().filter(string -> string.isEmpty()).count();

// list转为map
        Map<String,Object> map = person.stream().collect(Collectors.toMap(Person::getName,Person::getAge));

//获取实体类list中的某一字段值
        List<String> listString = resourceRuleTaskDetailList.stream().map(ResourceRuleTaskDetail::getSystemEnName).collect(Collectors.toList());
        List<String> listString1 = resourceRuleTaskDetailList.stream().map(s -> s.getSystemEnName()).collect(Collectors.toList());

        //输出列表中最大的数
        //1.写法一
        LongSummaryStatistics stats = resourceRuleTaskDetailList.stream().mapToLong(s -> s.getTaskId()).summaryStatistics();

        //写法二
        Long min = resourceRuleTaskDetailList.stream().mapToLong(s -> s.getTaskId()).min().getAsLong();
        Long max = resourceRuleTaskDetailList.stream().mapToLong(s -> s.getTaskId()).max().getAsLong();
        Long sum = resourceRuleTaskDetailList.stream().mapToLong(s -> s.getTaskId()).sum();
        Double avg = resourceRuleTaskDetailList.stream().mapToLong(s -> s.getTaskId()).average().getAsDouble();

 //按照taskId分组,并取第一条数据
        Map<Long,ResourceManageTaskHistory> taskHistoryMap = historyList.stream().collect(Collectors.groupingBy(ResourceManageTaskHistory::getTaskId, Collectors.collectingAndThen(Collectors.toList(), value -> value.get(0))));
        // map转为list
        List<ResourceManageTaskHistory> taskHistoryList = taskHistoryMap.entrySet().stream().map(en -> en.getValue()).collect(Collectors.toList());

 //过滤白名单系统信息
        List<String> systemWhiteEnNameList = Arrays.asList("abc", "asd", "bc", "efg", "abcd","", "jkl");
        List<ResourceRuleTaskDetail> filter = resourceRuleTaskDetailList.stream().filter(s -> !systemWhiteEnNameList.contains(s.getSystemEnName())).collect(Collectors.toList());

 // 交集
        List<String> intersection = list1.stream().filter(item -> list2.contains(item)).collect(Collectors.toList());

 // 差集 (list1 - list2)
        List<String> reduce1 = list1.stream().filter(item -> !list2.contains(item)).collect(Collectors.toList());

 // 差集 (list2 - list1)
        List<String> reduce2 = list2.stream().filter(item -> !list1.contains(item)).collect(Collectors.toList());

 // 并集
        List<String> listAll = list1.parallelStream().collect(Collectors.toList());
        List<String> listAll2 = list2.parallelStream().collect(Collectors.toList());
        listAll.addAll(listAll2);
每天一点点,惊喜不间断
原文地址:https://www.cnblogs.com/wszn-java/p/14718164.html