问题1

一个集合中有两种数据,想通过一次stream 流 实现数据隔离,然后分别得到两种数据的集合

ArrayList<Integer> integers = CollectionUtil.newArrayList(-1, -2, -3, 0, 1, 23, 4);
        Collector<Integer, ?, Map<Boolean, List<Integer>>> objectMapCollector = Collectors.partitioningBy(o -> o > 0);

        Map<Boolean, List<Integer>> collect = integers.stream().collect(objectMapCollector);

        System.out.println(JSONUtil.toJsonPrettyStr(collect));

stream 流过滤集合_前端


问题2

获取 List<Map<String, Object>> 集合中的 所有map的value 集合

List<String> collect = data.stream()
            .flatMap(map -> map.values().stream())
            .map(String::valueOf).collect(Collectors.toList());

flatMap 收集多个处理数据流为一个流

问题3

将一组字符串,每个分别按照某种规则,转成另多个字符串,并返回一组数据
例如: 一组字符串为 A B C ,每个字符串都转成两种, 第一种前面加一个字符串,第二种后边加一个字符串
[“A”,“B”,“C”,“A.2”,“1,A”,“B.2”,“C.2”,“1,B”,“1,C”]

String name="A",age="B",add="C";
	   Set<String> collect = Stream.of(name, age, add)
	            .filter(StringUtils::hasText)
	            .flatMap(v -> Stream.of(
	                    v,
	                    String.join(",", "1", v),
	                    String.join(".", v, "2")
	            )).collect(Collectors.toSet());
        System.out.println(JSONUtil.toJsonStr(collect));

flatMap 收集多个处理数据流为一个流

问题4

用于sql拼接,例如拼接 入参为 集合 in条件; 入参为集合[1,2,3],最终得到 (1,2,3)

String collect = Arrays.asList("1", "2", "3").stream().collect(joining(",", "(", ")"));

问题5

收集 List<A> 中的一个列表集合List<B> 中的一个属性  合成一个List<T> 返回
例如:
pulic class A{
	private Long id;
	private String name;
	private List<B> resList
}
pulic class B{
	private Long id;
	private String name;
}

我有集合List<A> 且其中 属性resList 有值,我想收集所有的对象B 的id

此时 我希望收集集合A中的resList中的对象B的id 为一个一维集合

List<Long> bIdList = listA.stream().flatMap(classA -> classA.getResList().stream())
                .map(B::getId).collect(Collectors.toList());

总结:

java8的stream流真心强大,突然发现用了这么久,还是没用明白,继续~~