记录Java Steam流的一些用法

基础示例类:
Use.java

public class User {

    private String userId;

    private String userName;

    private Integer age;

    private String region;
}

1.steam流遍历List列表

 List<User> userList = new ArrayList<>();
 userList.add(new User("1", "张三", 20, "上海"));
 userList.add(new User("2", "李四", 20, "北京"));
 userList.add(new User("3", "王五", 25, "上海"));

 userList.stream().forEach(user -> {
     // 操作
     System.out.println(user.getUserName() + ":" + user.getAge() + ":" + user.getRegion());
 });

 // 与上面方法等同
 userList.forEach(user -> {
     // 操作
     System.out.println(user.getUserName() + ":" + user.getAge() + ":" + user.getRegion());
 });

2.steam流根据某个字段进行分组

例如需要对User里统一地区的人进行分组

 List<User> userList = new ArrayList<>();
 userList.add(new User("1", "张三", 20, "上海"));
 userList.add(new User("2", "李四", 20, "北京"));
 userList.add(new User("3", "王五", 25, "上海"));

 Map<String, List<User>> collect = userList.stream().collect(Collectors.groupingBy(User::getRegion));
 System.out.println(collect);

结果:

{
	上海=[
		User(userId=1, userName=张三, age=20, region=上海),
		User(userId=3, userName=王五, age=25, region=上海)
		], 
	北京=[
		User(userId=2, userName=李四, age=20, region=北京)
		]
}

3.steam流将list里面某个字段合并成String并用,隔开

例如获取User列表所有用户姓名

 List<User> userList = new ArrayList<>();
 userList.add(new User("1", "张三", 20, "上海"));
 userList.add(new User("2", "李四", 20, "北京"));
 userList.add(new User("3", "王五", 25, "上海"));

 String userNameStr = userList.stream().map(User::getUserName).collect(Collectors.joining(","));
 System.out.println(userNameStr);

结果:

张三,李四,王五

4.steam流 求和

例如,计算User列表所有用户的总年龄

 List<User> userList = new ArrayList<>();
 userList.add(new User("1", "张三", 20, "上海"));
 userList.add(new User("2", "李四", 20, "北京"));
 userList.add(new User("3", "王五", 25, "上海"));
 
int sumAge = userList.stream().mapToInt(User::getAge).sum();

结果:

sumAge=65

5.steam流 对某个数字字段排序,并转换为链表

List<User> userList = new ArrayList<>();
userList.add(new User("张三", 20));
userList.add(new User("李四", 27));
userList.add(new User("王五", 25));
userList.add(new User("赵六", 18));

System.out.println("排序前:");
System.out.println(userList);

// 根据年龄 升序排序 并转换结果为链表
LinkedList<User> collect = userList.stream().sorted(Comparator.comparing(User::getAge)).collect(Collectors.toCollection(LinkedList::new));
System.out.println("升序排序后:");
System.out.println(collect);

// 根据年龄 降序排序 并转换结果为链表
LinkedList<User> collect2 = userList.stream().sorted(Comparator.comparing(User::getAge).reversed()).collect(Collectors.toCollection(LinkedList::new));
System.out.println("降序排序后:");
System.out.println(collect2);

结果:

排序前:
[User(name=张三, age=20), User(name=李四, age=27), User(name=王五, age=25), User(name=赵六, age=18)]
升序排序后:
[User(name=赵六, age=18), User(name=张三, age=20), User(name=王五, age=25), User(name=李四, age=27)]
降序排序后:
[User(name=李四, age=27), User(name=王五, age=25), User(name=张三, age=20), User(name=赵六, age=18)]

6.steam流 提取某个字段内容组成列表

List<User> userList = new ArrayList<>();
userList.add(new User("张三", 20));
userList.add(new User("李四", 27));
userList.add(new User("王五", 25));
userList.add(new User("赵六", 18));

// 提取用户姓名组成list
List<String> userNameList = userList.stream().map(User::getName).collect(Collectors.toList());
System.out.println(userNameList);

结果:

[张三, 李四, 王五, 赵六]
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中的(Stream)是一种用于处理集合数据的抽象概念。提供了一种更简洁、更灵活的方式来处理集合中的元素。在Java 8及之后的版本中,引入了Stream类,它提供了一系列的操作方法,可以对集合进行过滤、映射、排序等操作。 使用的一般步骤如下: 1. 创建:可以通过集合或数组来创建。 - 通过集合创建:使用`stream()`方法将集合转换为。例如:`List<String> list = Arrays.asList("a", "b", "c"); Stream<String> stream = list.stream();` - 通过数组创建:使用`Arrays.stream()`方法将数组转换为。例如:`int[] array = {1, 2, 3}; IntStream stream = Arrays.stream(array);` 2. 中间操作:对进行过滤、映射、排序等操作,返回一个新的。常用的中间操作包括: - `filter(Predicate<T> predicate)`:根据给定的条件过滤中的元素。 - `map(Function<T, R> mapper)`:将中的元素按照给定的映射函数进行转换。 - `sorted()`:对中的元素进行排序。 - `distinct()`:去除中重复的元素。 3. 终端操作:对进行聚合、收集、遍历等最终操作,返回一个结果或将转换为其他数据结构。常用的终端操作包括: - `forEach(Consumer<T> action)`:对中的每个元素执行给定的操作。 - `collect(Collector<T, A, R> collector)`:将中的元素收集到一个集合中。 - `count()`:返回中元素的个数。 - `min(Comparator<T> comparator)`:返回中的最小元素。 这只是的基本用法Java还提供了更多的操作方法和功能,可以根据具体需求进行学习和使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值