java 8集合操作

本文详细介绍了Java 8 Stream API的各种实用操作,包括过滤、分组、排序、去重、转换、求和、拼接、转数组、转Map等高级功能,以及集合的交集、补集、并集和差集操作,为开发者提供了全面的Stream API使用教程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、过滤

//过滤出年龄大于30的用户
List<User> userList=null;
List<User> reslutList=userList.stream().filter(user ->(user.getAge()>=30)).collect(Collectors.toList());

2、分组

List<User> userList=null;
//根据用户性别分组
Map<Integer,List<User>> resultMap=userList.stream().collect(Collectors.groupingBy(user->user.getSex()));
//根据性别分组,再根据年龄分组
Map<Integer/*性别*/, Map<Integer/*年龄*/, List<User>>> groupMap =userList.stream().collect(Collectors.groupingBy(t -> t.getSex(), Collectors.groupingBy(t -> t.getAge())));

3、排序

List<Integer> list=null;
//升序
list.stream().sorted(); 
//降序
list.stream().sorted(Comparator.reverseOrder()); 
List<User> userList=null;
//根据用户年龄升序 
userList.stream().sorted(Comparator.comparing(User::getAge));
//根据用户年龄降序
userList.stream().sorted(Comparator.comparing(User::getAge).reverseOrder());

4、去重

List<User> userList=null;
//方式一:根据ID去重
List<User> reslutList = userList.stream().collect(Collectors.collectingAndThen(Collectors.toCollection(()->new TreeSet<>(Comparator.comparing(o->o.getId()))),ArrayList::new));
//方式二:去重,需要注意的是要先重写对象User的equals和hashCode方法
List<User> reslutList = userList.stream().distinct().collect(Collectors.toList());

5、对象集合转换成单属性集合

List<User> userList=null;
//获取用户ID集合
List<Integer> reslutList = userList.stream().map(t -> t.getId()).collect(Collectors.toList());

6、List拼接成字符串

List<String> nameList=null;
String names = nameList.stream().collect(Collectors.joining(","));
List<User> userList=null;
String names = userList.stream().map(User::getName).collect(Collectors.joining(","));

7、sum求和

List<String> nameList=null;
//获取年龄总和
int count = userList.stream().mapToInt(t -> t.getAge()).sum();

8、List转数组

List<String> userNameList=null;
//String集合转String数组
String[] arrStr = userNameList.stream().toArray(String[]::new);

9、List转Map

List<User> userList=null;
//根据用户ID转换成Map【重复取第一个】
Map<String,TerminalEx> map=userList.stream().collect(Collectors.toMap(User::getId,o->o,(o1,o2)->o1));

10、集合交集、补集、并集、差集 操作【非java 8特性】

(1)依赖jar包:

<dependency>
    <groupId>cn.hutool</groupId>
    <artifactId>hutool-all</artifactId>
    <version>5.5.2</version>
</dependency>

(2)示例

public class Test {
    public static String[] attr1 = new String[]{"A", "B", "C", "D", "E", "F", null};
    public static String[] attr2 = new String[]{"1", "2", "3", "D", "E", "F", null};
    public static void main(String[] args) {
        ArrayList<String> list1 = new ArrayList<>(Arrays.asList(attr1));
        ArrayList<String> list2 = new ArrayList<>(Arrays.asList(attr2));
        System.out.println("list1和list2的交集:" + CollectionUtil.intersection(list1, list2));
        System.out.println("list1和list2的补集:" + CollectionUtil.disjunction(list1, list2));
        System.out.println("list1和list2的并集:" + CollectionUtil.union(list1, list2));
        System.out.println("参照list1,list2的差集:"+CollectionUtil.subtract(list1,list2));
        System.out.println("参照list2,list1的差集:"+CollectionUtil.subtract(list2,list1));
    }
}
//输出如下:
list1和list2的交集:[null, D, E, F]
list1和list2的补集:[1, A, 2, B, 3, C]
list1和list2的并集:[null, 1, A, 2, B, 3, C, D, E, F]
参照list1,list2的差集:[A, B, C]
参照list2,list1的差集:[1, 2, 3]
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值