Java8处理List,交集、并集、排序、筛选、分组

举例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"}]}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值