Stream Collectors - partitioningBy

news/2024/7/5 7:35:01 标签: java

public static <T> Collector<T,​?,​Map<Boolean,​List<T>>> partitioningBy​(Predicate<? super T> predicate)

分区函数,返回一个map,key永远只有两个分别是boolean值false和true,用法和groupingBy类似。

下面给一个简单的例子:

void test29() {

        List<User> userList = List.of((new User("mail1","adr1")),(new User("mail2","a2")),(new User("mail3","adr3")));

        Map<Boolean, List<User>> passingFailing = userList.stream().collect(Collectors.partitioningBy(s -> s.getAddr().length() > 2));

        passingFailing.forEach((k,v) -> System.out.println(k+" : "+v.stream().collect(Collectors.mapping(a -> a.getEmail()+":"+a.getAddr(), Collectors.toList()))));

    }

运行结果:

false : [mail2:a2]

true : [mail1:adr1, mail3:adr3]

严格来说partitioningBygourpingBy还是不一样,前者就像是后者的极品版本。首先前者返回的map中只有两个键值对,分别是keyfalsetrue,而对应的value是集合中不满足和满足partitioningBy函参条件的元素集合。

 

public static <T,​D,​A> Collector<T,​?,​Map<Boolean,​D>> partitioningBy​(Predicate<? super T> predicate, Collector<? super T,​A,​D> downstream)

两个参数的partitioningBy方法,相比上面的方法多了一个Collector类型的downstream参数,作用不言而喻,就是减少中间数据处理步骤,能直接一步得到想要的结果。

看个例子:

void test30() {

        List<User> userList = List.of((new User("mail1","adr1")),(new User("mail2","a2")),(new User("mail3","adr3")));

        Map<Boolean, List<String>> passingFailing = userList.stream().collect(Collectors.partitioningBy(s -> s.getAddr().length() > 2, Collectors.mapping(a -> a.getEmail()+":"+a.getAddr(), Collectors.toList())));

        passingFailing.forEach((k,v) -> System.out.println(k+" : "+v));

    }

运行结果:

false : [mail2:a2]

true : [mail1:adr1, mail3:adr3]

仔细理解一下上面两个例子,就会发现后面一个例子在结果集中就直接得到了可以直接打印的字符串类型而不是不能直接打印的user对象类型。

 

还是举个不恰当的例子,假如你要去你家附近的澡堂子洗澡,首先你会先在家换一身去澡堂洗澡的便装,然后走到澡堂在更衣室把便装脱光在进洗浴室开始洗澡,这就是前面一个参数的例子,而第二个2个参数的例子就像是你直接在家里把衣服脱光光然后直接走进澡堂的洗浴室洗澡,一步到位没有中间步骤是不是特别爽。


http://www.niftyadmin.cn/n/928506.html

相关文章

Oracle再发力,区块链平台多项更新

本周&#xff0c;Oracle宣布将加速全球区块链的采用。据悉&#xff0c;目前全球已经众多企业通过Oracle区块链平台享受到了区块链应用程序的优势&#xff0c;而Oracle将为区块链平台添加更多新功能&#xff0c;帮助用户加速区块链应用程序的开发、集成和部署。 Oracle区块链平台…

Stream Collectors - reducing

public static <T> Collector<T,​?,​Optional<T>> reducing​(BinaryOperator<T> op) 不能看方法名理解其作用&#xff0c;入参是一个二目运算函数参数&#xff0c;作用比较广泛。 处理流程简单描述&#xff1a; 第一步&#xff1b;a&#xff0c…

这才是Tomcat内存配置的正确姿势

1.背景 虽然阅读了各大牛的博客或文章,但并没有找到特别全面的关于JVM内存分配方法的文章,很多都是复制黏贴 为了严谨,本文特别备注只介绍基于HotSpot VM虚拟机,并且基于JDK1.7的内存分配情况,有关GC的说法也是基于CMS的concurrent collection(而非G1),防止大牛拍砖. 目前主流的…

拥抱PostgreSQL,红帽再表态:SSPL的MongoDB坚决不用

2019年1月&#xff0c;红帽在最新的RHEL 8.0 Beta Release Note 中明确表示因为 MongoDB 使用了 SSPL 协议&#xff0c;所以将不会在 8.0 系统中提供该数据库。 2019年2月12日&#xff0c;红帽官方发博称&#xff0c;Red Hat Satellite将在后端标准化PostgreSQL&#xff0c;并且…

Stream Collectors - summarizingInt

public static <T> Collector<T,​?,​IntSummaryStatistics> summarizingInt​(ToIntFunction<? super T> mapper) public static <T> Collector<T,​?,​LongSummaryStatistics> summarizingLong​(ToLongFunction<? super T> mapp…

1_npctele

1_npctele 其他同1_itemtele slot       排序字段(传送NPC中的显示根据这个来排序 也就是 数值越小的越在前)creature    传送员id (这里指定ID可以设置多个传送员)parentmenuidicongossipmapposition_xposition_yposition_zposition_oactionvendoridreqtypereqva…

Go语言的通道(2)-缓冲通道

有缓冲的通道相比于无缓冲通道&#xff0c;多了一个缓存的功能&#xff0c;如下图描述的一样&#xff1a; 从图上可以明显看到和无缓冲通道的区别&#xff0c;无缓冲必须两个Goroutine都进入通道才能进行数据的交换&#xff0c;这个不用&#xff0c;如果数据有&#xff0c;直接…

Stream Collectors - summingInt

public static <T> Collector<T,​?,​Integer> summingInt​(ToIntFunction<? super T> mapper) public static <T> Collector<T,​?,​Long> summingLong​(ToLongFunction<? super T> mapper) public static <T> Collector…