Stream流 操作List<T>集合

本文详细介绍并演示了Java8中Stream API的各种实用操作,包括过滤、映射、收集、排序、分组、聚合等常见操作,展示了如何利用Stream简化集合处理流程。

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

前言:java8提供了很多操作集合的,以下是写的一些简单的案例。希望能有用 (* ̄︶ ̄)。

更多Stream操作可参考: www.ibm.com/developerwo…

/**
 * @author DHing
 */
public class Streams { 
   public static void main(String[] args) {
        
        List<User> user = new ArrayList<>();
        User u = new User();
        u.setAge(1);
        u.setName("hello");
        User u3 = new User();
        u3.setAge(2);
        u3.setName("hello2");
        user.add(u);
        user.add(u3);
        
        user.forEach(u1 -> {
            System.out.println(u1.getAge() + " " + u1.getName());
        });
        
    //输出指定类型
    List<Integer> collect = user.stream().map(a -> Integer.getInteger(a.getName())).collect(Collectors.toList());

        //匹配名字为hello的对象集合
          List<User> collect = user.stream().filter(a -> "hello".equals(a.getName())) .collect(Collectors.toList()); //没有去重
          List<User> collect3 = user.stream().filter(a -> "hello".equals(a.getName())).distinct().collect(Collectors.toList()); //去重
        //limit
         List<User> collect2 = user.stream().limit(2).collect(Collectors.toList());
         //count
         user.stream().filter(a -> a.getAge() > 10).count();
        System.out.println(collect2);
        //求年龄总和
        user.stream().map(a -> a.getAge()).reduce(0, Integer::sum);
        //等同上面 求和
         user.stream().mapToInt(User :: getAge).sum();
         //平均
         user.stream().mapToInt(User :: getAge).average();
         //最小
         user.stream().mapToInt(User :: getAge).min();
         //最大
         user.stream().mapToInt(User :: getAge).max();
         //年龄 乘 10
         user.stream().mapToDouble(w -> w.getAge() * 10).sum();
         //排序
         user.stream().sorted((s1, s2) -> s1.getAge().compareTo(s2.getAge())).collect(Collectors.toList());
         //分组
         user.stream().collect(Collectors.groupingBy(User::getAge));
         //匹配
         boolean flag = user.stream().allMatch(a -> a.getAge() > 10);
         boolean flag1 = user.stream().noneMatch(a -> a.getAge() > 10);
         //获取集合对象值
         String name = user.stream().filter(u5 -> u5.getAge() == 1).map(User:: getName).findFirst().get();
         
         //取指定字段为一个新的集合
         user.stream().map(us -> {
             User u1 = new User();
             u1.setAge(us.getAge() + 10);
             return u1;
         }).collect(Collectors.toList());
         //同理转为一个map集合
         user.stream().map(us -> {
             Map u1 = new HashMap();
             u1.put("age", us.getAge());
             u1.put("name", us.getName());
             return u1;
         }).collect(Collectors.toList());

        //List<User> ——> Map<Integer,String>
        Map<Integer, String> map = user
            .stream()
            .collect
                (Collectors.toMap(User::getAge, User::getName));
        System.out.println(map);//{1=hello, 2=hello2}
      //List<User> ——-> Map<Integer, User>
        Map<Integer, User> map1 = user
            .stream()
            .collect
                (Collectors.toMap(User::getAge, Function.identity()));
         map1.entrySet().forEach(System.out::println); // 1=Streams$User@682a0b20 ,2=Streams$User@4dd8dc3

       // List<User> ————> Map<String, List<User>>
        Map<String, List<User>> groupedByName = user
            .stream()
            .collect
                (Collectors.groupingBy(User::getName));
        System.out.println(groupedByName); //{hello2=[Streams$User@4dd8dc3], hello=[Streams$User@682a0b20]}
         
    }
 static class User{
        private String name;
        private Integer age;
        
        public String getName() {
            return name;
        }
      
        public void setName(String name) {
            this.name = name;
        }
        
        public Integer getAge() {
            return age;
        }
         
        public void setAge(Integer age) {
            this.age = age;
        }
    }
}复制代码

GroupBy可参考: blog.youkuaiyun.com/u011663149/…

Map.merge() 可参考: blog.youkuaiyun.com/u011663149/…

Collectors 可参考:blog.youkuaiyun.com/u011663149/…



转载于:https://juejin.im/post/5cf643c46fb9a07efa090579

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值