举例1:有以下两个list
List<String> a = Arrays.asList("a1", "1", "a3", "8");
List<String> b = new ArrayList<>();
b.add("1");
b.add("7");
b.add("10");
b.add("3");
b.add("8");
b.add("6");
1、求交集
两种写法均可!
// 交集
List<String> intersection = a.stream().filter(b::contains).collect(Collectors.toList());
System.out.println("--交集1--");
intersection.parallelStream().forEach(System.out :: println);
List<String> intersection2 = a.stream().filter(r -> b.contains(r)).collect(Collectors.toList());
System.out.println("--交集2--");
intersection2.parallelStream().forEach(System.out :: println);
结果:
--交集1--
8
1
--交集2--
8
1
2、求并集
先合并,再去重!
// 并集:先合并,再去重
List<String> lista = a.parallelStream().collect(Collectors.toList());
List<String> listb = b.parallelStream().collect(Collectors.toList());
lista.addAll(listb);
System.out.println("--未去重的并集--");
lista.parallelStream().forEach(System.out :: println);
// 并集:去重
List<String> collect2 = lista.stream().distinct().collect(Collectors.toList());
System.out.println("--去重之后的并集--");
collect2.parallelStream().forEach(System.out :: println);
结果:
--未去重的并集--
10
8
7
a3
3
1
8
a1
1
6
--去重之后的并集--
10
a1
1
8
3
a3
6
7
举例2:有以下一个list集合c
[{
"a": "a1",
"b": "b1"
}, {
"a": "a1",
"b": "b2"
}, {
"a": "a3",
"b": "b3"
}, {
"a": "a4",
"b": "b4"
}, {
"a": "a4",
"b": "b5"
}]
3、筛选:从c集合中提取a字段的集合
// 将对象列表中的属性a提取成一个列表:List<T> --> List<String>
List<String> result = c.stream().map(r -> r.getA()).collect(Collectors.toList());
System.out.println("--从list中提取某个字段的集合--");
result.parallelStream().forEach(System.out :: println);
// 将对象列表中的属性a提取成一个列表,并去重:List<T> --> List<String>去重后的
List<String> collect = c.stream().map(TestInfo::getA).distinct().collect(Collectors.toList());
System.out.println("--从list中提取某个字段的集合,并去重--");
collect.parallelStream().forEach(System.out :: println);
结果:
--从list中提取某个字段的集合--
a3
a4
a1
a4
a1
--从list中提取某个字段的集合,并去重--
a3
a4
a1
4、筛选:过滤集合c中a = a4的集合
// 过滤出 a = a4的集合:List<T> --> List<T>只保留a=a4的
List<TestInfo> a4list = c.stream().filter(f -> f.getA().equals("a4")).collect(Collectors.toList());
System.out.println("--筛选出a=a4的集合--");
System.out.println(JSONObject.toJSONString(a4list));
结果:
--筛选出a=a4的集合--
[{"a":"a4","b":"b4"},{"a":"a4","b":"b5"}]
5、排序:根据a字段排序
// 排序:根据a字段排序
List<TestInfo> sortList = c.stream().sorted(Comparator.comparing(TestInfo::getA)).collect(Collectors.toList());
System.out.println("--根据a字段排序--");
System.out.println(JSONObject.toJSONString(sortList));
结果:
--根据a字段排序--
[{"a":"a1","b":"b1"},{"a":"a1","b":"b2"},{"a":"a3","b":"b3"},{"a":"a4","b":"b4"},{"a":"a4","b":"b5"}]
6、分组
// 分组:List<T> --> Map<String, List<T>>
Map<String, List<TestInfo>> collect1 = c.stream().collect(Collectors.groupingBy(TestInfo::getA));
System.out.println("--将list转成Map--");
System.out.println(JSONObject.toJSONString(collect1));
结果:
--将list转成Map--
{"a1":[{"a":"a1","b":"b1"},{"a":"a1","b":"b2"}],"a3":[{"a":"a3","b":"b3"}],"a4":[{"a":"a4","b":"b4"},{"a":"a4","b":"b5"}]}