Java 8 中Stream API用法实例

一、简介

Stream API是Java 8中的一大新特性,它借助于Lambda表达式,极大地简化了代码复杂度,提高了编程效率和程序可读性。本文通过一些实例代码来演示Stream API的常见用法。

二、准备工作

创建一个用户实体类用于演示

public class User {

    private String id;

    private String name;

    private int age;

    public User(String id, String name, int age) {
        this.id = id;
        this.name = name;
        this.age = age;
    }

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }

    @Override
    public String toString() {
        return "User{" +
            "id='" + id + '\'' +
            ", name='" + name + '\'' +
            ", age=" + age +
            '}';
    }
    
}

添加几条测试数据

List<User> userList = new ArrayList<>();
userList.add(new User("1", "乔大", 26));
userList.add(new User("2", "王二", 13));
userList.add(new User("3", "张三", 33));
userList.add(new User("4", "李四", 26));

三、用法演示

// list循环
userList.forEach(user -> System.out.println("用户信息:" + user));

// list转map  key: id value: User
Map<String, User> userMap = userList.stream().collect(Collectors.toMap(User::getId, Function.identity()));

// map循环
userMap.forEach((key, value) -> System.out.println("key: " + key + ", value: " + value));

// list分组 按年龄分组 key: 年龄 value: 对应的用户列表
Map<Integer, List<User>> groupByAgeMap = userList.stream().collect(Collectors.groupingBy(User::getAge));

// list过滤 过滤出年龄为26的用户
List<User> filterByAgeList = userList.stream().filter(user -> user.age == 26).collect(Collectors.toList());

// list过滤 过滤出年龄为26的用户 并行执行
List<User> filterByAgeParallelList = userList.parallelStream().filter(user -> user.age == 26).collect(Collectors.toList());

// 判断是否存在名字为"李四"的用户
boolean isAnyMatch = userList.stream().anyMatch(user -> "李四".equals(user.getName()));

// 判断是否所有用户名字都为"李四"
boolean isAllMatch = userList.stream().anyMatch(user -> "李四".equals(user.getName()));

// 判断是否不存在名字为"李四"的用户
boolean isNoMatch = userList.stream().noneMatch(user -> "李四".equals(user.getName()));

// 找出年龄最大的用户
Optional<User> maxAgeUser = userList.stream().max(Comparator.comparing(User::getAge));

// 找出年龄最小的用户
Optional<User> minAgeUser = userList.stream().max(Comparator.comparing(User::getAge));

// 找出年龄为26的第一个用户的信息
Optional<User> firstUser = userList.stream().filter(user -> user.getAge() == 26).findFirst();

// 找出年龄为26的任意一个用户的信息 如数据较少且串行执行一般会返回第一个结果,如并行执行不一定是第一个
Optional<User> anyUser = userList.stream().filter(user -> user.getAge() == 26).findFirst();

// 统计年龄为26的用户个数
long userCount = userList.stream().filter(user -> user.getAge() == 26).count();

// 返回所有人的年龄列表
List<Integer> ageList = userList.stream().map(User::getAge).collect(Collectors.toList());

// 返回所有人的年龄列表 并去重
List<Integer> ageDistinctList = userList.stream().map(User::getAge).distinct().collect(Collectors.toList());

// 按年龄升序排列
userList.sort(Comparator.comparing(User::getAge));

// 按年龄降序排列
userList.sort(Comparator.comparing(User::getAge).reversed());

// 对年龄进行统计操作 求和、平均值、计数、最大值、最小值
IntSummaryStatistics statistics = userList.stream().collect(Collectors.summarizingInt(User::getAge));
System.out.println(statistics.getSum());
System.out.println(statistics.getAverage());
System.out.println(statistics.getCount());
System.out.println(statistics.getMax());
System.out.println(statistics.getMin());
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值