java8 Stream接口简单使用

Stream接口简单使用

什么是stream?

Stream是元素得集合,这点让Stream看起来类似Iterator;可以支持顺序和并行的对原Stream进行汇聚的操作

我们可以把Stream当成一个高级版本的Iterator,原始版本的Iterator,用户只能一个一个的遍历元素并对其执行某些操作;高级版本的Stream,用户只要给出需要对其包含的元素执行什么操作,比如“过滤大于10的数字”,“获取所有数字的和”等,具体这些操作如何应用到每个元素上,就给Stream就好了!

代码演示:

定义一个实体类:

class Cat {
    private String name;
    private int age;

    public Cat() {
    }

    public Cat(String name, int age) {
        this.name = name;
        this.age = age;
    }
    // get,set,toString

    @Override
    public boolean equals(Object o) {
        if (this == o) {
            return true;
        }
        if (o == null || getClass() != o.getClass()) {
            return false;
        }
        Cat cat = (Cat) o;
        return age == cat.age && Objects.equals(name, cat.name);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, age);
    }
}

添加对象到集合中:

 List<Cat> catsList = new ArrayList<>();
        catsList.add(new Cat("tom", 3));
        catsList.add(new Cat("tom", 3));
        catsList.add(new Cat("uom", 3));
        catsList.add(new Cat("tom", 1));
        catsList.add(new Cat("jek", 2));
        catsList.add(new Cat("join", 3));

案列1:遍历集合

 private static void test1(List<Cat> catsList) {
        catsList.forEach(System.out::println);
}

案列2:筛选集合中年龄大于2的并把它们的名字组成一个新的集合

 private static void test1(List<Cat> catsList) {
        List<String> collect = catList.stream().filter(a -> a.getAge() > 2).map(Cat::getName).collect(Collectors.toList());
 }

案列3:转换为set集合

private static void test1(List<Cat> catsList) {
       //Set<Cat> collect = new HashSet<>(catsList);建议
         Set<Cat> collect = catsList.stream().collect(Collectors.toSet());
}

案列4:按照年龄排序后转换成linkedHashSet集合

private static void test1(List<Cat> catsList) {                     
    LinkedHashSet lhs = catsList.stream().sorted(Comparator.comparing(Cat::getAge)).collect(Collectors.toCollection(LinkedHashSet::new))
}

案列5:找出年龄最大的,如果年龄一样找出名字比较大的

 private static void test1(List<Cat> catsList) {
        Optional<Cat> max = catsList.stream().max((o1, o2) -> {
            if (o1.getAge() != o2.getAge()) {
                return o1.getAge() - o2.getAge();
            }
            return o1.getName().compareTo(o2.getName());
        });
        System.out.println(max.orElse(null));
}

案例6:去重后计算年龄和

 private static void test1(List<Cat> catsList) {
        Optional<Integer> reduce = catsList.stream().distinct().map(Cat::getAge).reduce(Integer::sum);
        System.out.println(reduce.orElse(-1));
}

案例7:判断是否所有的年龄都大于2岁

 private static void test1(List<Cat> catsList) {
         boolean b = catsList.stream().allMatch(a -> a.getAge() > 2);
}

案例8:判断是否至少有一个大于2岁的

 private static void test1(List<Cat> catsList) {
         boolean b = catsList.stream().anyMatch(a -> a.getAge() > 2);
}

案例9:按照年龄分组:

private static void test1(List<Cat> catsList) {	
    Map<Integer, List<Cat>> collect = catsList.stream().collect(Collectors.groupingBy(Cat::getAge));
}
posted @   JamieChyi  阅读(9)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示