Java 8使用Collectors.partitioningBy分割列表

有这样一个集合:

List<Integer> integers = [ 1,2,3,4,5,6,7,8,9]

现在需要把集合按奇偶数分割为两个列表。这种情况下,我们可以使用Collectors.partitioningBy来分割:

Map<Boolean, List<Integer>> map = 
    integers.stream().collect(Collectors.partitioningBy(x -> x%2 == 0));

partitioningBy会根据值是否为true,把集合分割为两个列表,一个true列表,一个false列表。

版权声明:著作权归作者所有。

相关推荐

Java 8使用parallel Stream测试StringBuilder线程安全

我们知道StringBuilder不是线程安全的,但如何证明它非线程安全呢?测试StringBuilder是否线程安全一个简单的思路如下:模拟多个线程并发向StringBuilder实例添加字符,最后检测builder.toString().length()的值是否为添加字符的次数,如果非线程安全会出现builder.toString().length()的值与添加字符的次数不一致。Java&nb

Java 8/9使用Stream获取字符出现在字符串的索引列表

需求是这样的:输入一个字符串和一个字符,返回此字符出现在字符串里的所有索引。可以使用for循环迭代字符串可以实现此需求。考虑了下java8和java9的实现方案。java 8使用IntStream的实现方案public static List<Integer> getIndexes(String s, char c)

Python 3按指定的元素分割列表

Python 3有多种方法可以用来分割列表。示例有以下列表li = ['a','b','c','.','aa','bb','cc','.','aaa','bbb','ccc'] 现需要按“.”分割列表。使用itertools.groupby>>>li = ['a','b','c','.','aa','bb','cc','.','a

Java 8双冒号::方法引用操作符

Java 8中,双冒号::称为方法引用操作符,我们可以使用它来引用类的方法。::引用类的方法,返回一个函数接口(function interface),这等同于lambda表达式,但与lambda表达式不同的是,lambda表达式需要自定义一个lambda body,而::引用的是一个方法。简单地说函数接口,就是只拥有一个抽象方法的接口,如Runnable。::引用方

Java8使用Lambda把List转换为Map

使用Java8的Collections可以很简便地把List转换为Map以User为例List里的User名字唯一Map<String, User> result =     users.stream().collect(Collectors.toMap(User::getName,   &nbs

Java 8 Stream API转换到Kotlin集合API

Kotlin提供的集合操作的API相对Java 8 Stream的API简洁很多。下面是Java 8 Stream API转换到Kotlin集合API。 映射属性聚合为列表// Java:   List<String> names = users.stream().m