java 8 stream 对集合的简单操作

Java 8 stream 流操作集合的一些简单用法:

List<User> userList = userService.getUserList();

一. 将装有User对象的List集合转为一个Map集合,key 为 id,值为对象本身;当然,key和值由你的需求来定;e指代当前User对象;

Map<String, User> collect = userList.stream().collect(Collectors.toMap(User::getId, e -> e));

Map<String, String> collect1 = userList.stream().collect(Collectors.toMap(User::getId, e -> e.getName()));

如果k值相同,用后面的覆盖前面的

Map<String, String> collect1 = userList.stream().collect(Collectors.toMap(User::getId, e -> e.getName(),(a,b) ->b));

二. 将集合中的对象按照对象的属性分组成一个Map集合,这里按照User的id来分组

Map<String, List<User>> stringListMap = userList.stream().collect(Collectors.groupingBy(User::getId));

三. 获取集合中所有对象的某个属性值转为一个集合并去重,这里以id为例

List<String> userIds = userList.stream().map(User::getId).distinct().collect(Collectors.toList());

四.针对对象的熟悉,过滤求和

Integer collect = list.stream().filter(e->e.getScore() != null).collect(Collectors.summingInt(User::getScore));

List<String> collect1 = list.stream().filter(e->e.getName() != null).map(User::getName).collect(Collectors.toList());

五.规约,字符串拼接

    public static void main(String[] args) {
        List<User> userList = new ArrayList<>();
        User user = new User();
        user.setId("1");
        user.setName("李白");
        user.setScore(null);
        userList.add(user);

        User user1 = new User();
        user1.setId("2");
        user1.setName("李慕白");
        user1.setScore(20);
        userList.add(user1);

        User user2 = new User();
        user2.setId("3");
        user2.setName("老王");
        user2.setScore(30);
        userList.add(user2);

        List<String> ids = Arrays.asList("1","3");
        // 过滤需要的属性对象
        List<User> collect = userList.stream().filter(e -> null != e.getId()).filter(e -> ids.contains(e.getId())).collect(Collectors.toList());
        int size = collect.size();
        System.out.println(size);
        System.out.println("****************************************");
        Integer reduce = userList.stream().filter(e -> null != e.getScore()).map(User::getScore).reduce(0, Integer::sum);
        System.out.println(reduce);
        System.out.println("****************************************");
        String names = userList.stream().filter(e -> null != e.getName()).map(User::getName).collect(joining(","));
        System.out.println(names);
    }

六.根据集合中对象的某个属性去重集合

userList = userList.stream().collect(Collectors.collectingAndThen(
        Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(SysUser::getRealName))), ArrayList::new)
);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值