JAVA 使用stream流将List中的对象某一属性创建新的List

JAVA 使用stream流将List中的对象某一属性创建新的List

1.stream流介绍

Java Stream是Java 8引入的一种新机制,它可以让我们以声明式方式操作集合数据,提供了更加简洁、优雅的集合处理方式。Stream是一个来自数据源的元素队列,并支持聚合操作。它的特点有:

  • Stream 不会修改原始数据源。
  • Stream 操作是延迟执行的。
  • Stream 操作可以是无限的(比如用于生成随机数的操作)。

2.Stream基础用法

  • 1.创建Stream
    可以使用Stream.of()方法从一组元素创建Stream,例如:
java 复制代码
Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5);

也可以使用集合的stream()方法或parallelStream()方法创建Stream:

java 复制代码
List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
Stream<Integer> stream1 = list.stream();            // 顺序流
Stream<Integer> stream2 = list.parallelStream();    // 并行流
  • 2.过滤
    可以使用filter()方法过滤Stream中的元素,例如:
java 复制代码
Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5);
Stream<Integer> filteredStream = stream.filter(x -> x % 2 == 0);  // 过滤偶数
  • 3.映射
    可以使用map()方法将Stream中的元素映射为另一种类型,例如:
java 复制代码
Stream<String> stream = Stream.of("apple", "banana", "orange");
Stream<Integer> lengthStream = stream.map(String::length);  // 映射为字符串长度
  • 4.排序
    可以使用sorted()方法对Stream中的元素进行排序,例如:
java 复制代码
Stream<Integer> stream = Stream.of(3, 1, 4, 1, 5, 9);
Stream<Integer> sortedStream = stream.sorted();  // 默认升序排序
  • 5.去重
    可以使用distinct()方法去除Stream中的重复元素,例如:
java 复制代码
Stream<Integer> stream = Stream.of(1, 2, 3, 2, 1);
Stream<Integer> uniqueStream = stream.distinct();  // 去重
  • 6.统计
    可以使用count()方法统计Stream中的元素数量,例如:
java 复制代码
Stream<Integer> stream = Stream.of(1, 2, 3, 4, 5);
long count = stream.count();  // 统计元素数量

3.具体用法

经常在业务处理时 我们需要将某个对象list中元素对象的某一属性放在一个新的list 里面,在Java的Stream API中,你可以使用map操作来将List中的元素的某一属性提取出来并组成一个新的List。

示例代码

java 复制代码
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

class Person {
    private String name;
    private int age;

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

    public String getName() {
        return name;
    }
}

public class Main {
    public static void main(String[] args) {
        List<Person> personList = new ArrayList<>();
        personList.add(new Person("Alice", 25));
        personList.add(new Person("Bob", 30));
        personList.add(new Person("Charlie", 35));

        List<String> namesList = personList.stream()
                .map(Person::getName)
                .collect(Collectors.toList());

        System.out.println(namesList); // 输出:[Alice, Bob, Charlie]
    }
}

例子中,我们有一个Person类,它具有name和age属性。我们创建了一个包含多个Person对象的List。然后,我们使用Stream API对List进行操作。得到了一个name的新List

相关推荐
老马识途2.017 小时前
关于跨域问题的总结
java·前端
都叫我大帅哥17 小时前
Java日期时间三十年战争:从Date考古到LocalDateTime革命,以及数据库与前端的那点事儿
java
Muscleheng17 小时前
SpringBoot 集成 DeepSeek 实现 RAG 文档问答
java·spring boot·ai·springai
2501_9364156918 小时前
可变参数&综合练习&斗地主游戏
java·windows·游戏
极客先躯19 小时前
高级java每日一道面试题-2026年05月03日-实战篇[Docker]-如何实现容器化环境的数据加密?
java·运维·docker·容器·金融·加解密·高级面试
xqqxqxxq20 小时前
Java Socket 多人聊天室(私聊+群聊)技术笔记(V4版本)
java·网络·笔记
wang090720 小时前
自己动手写一个spring之aop_1
java·后端·spring
国科安芯20 小时前
FreeRTOS RISC-V 浮点上下文切换移植:在 IAR 工程中完整保存 FPU 寄存器
java·开发语言·单片机·嵌入式硬件·算法·系统架构·risc-v
deng120421 小时前
【Thread类的用法(1)-- Thread类的基本用法】
java·java-ee
suconnect21 小时前
Spring Boot接入企业RAG:文档切分、向量检索、权限过滤和答案溯源
java·spring boot·后端