Fork me on GitHub

Java Stream API

1. 基本概念

可以声明式方式处理数据集合的流
常用的操作有:过滤、映射、规约等

2.实用总结

2.1.创建

  • 从集合中创建Stream
点击查看代码
//1. 从集合中构建Stream
List<String> list = Arrays.asList("a", "b", "c", "d", "e");
Stream<String> stream = list.stream();
stream.forEach(System.out::println);
![image](https://img2024.cnblogs.com/blog/696166/202503/696166-20250302222938150-305534500.png)
  • 从数组中构建Stram
点击查看代码
//2. 从数组中构建Stream
String[] array = new String[]{"a", "b", "c", "d", "e"};
Stream<String> stream = Arrays.stream(array);
stream.forEach(System.out::println);
![image](https://img2024.cnblogs.com/blog/696166/202503/696166-20250302223306837-1932906897.png)
  • 从Streama.of中狗i按Stream
点击查看代码
//3. 从Stream中构建Stream
Stream<String> stream = Stream.of("a", "b", "c", "d", "e");
stream.forEach(System.out::println);
![image](https://img2024.cnblogs.com/blog/696166/202503/696166-20250302223442642-1532929870.png)
  • 创建无限Stream
点击查看代码
//4. 创建无限Stream
Stream.iterate(0, n -> n + 3).limit(10).forEach(System.out::println);
![image](https://img2024.cnblogs.com/blog/696166/202503/696166-20250302223710299-394963010.png)

2.2 常规操作

  • 过滤:使用filter过滤满足条件的元素
public class StreamDemo {
static class Student {
private String name;
private int age;
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 "Student{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}
private static List<Student> genStudents() {
List<Student> students = new ArrayList<>();
for (int i = 0; i < 100; i++) {
Student student = new Student();
student.setAge(i);
student.setName("name" + i);
students.add(student);
}
return students;
}
}
//1. 过滤
List<Student> students = genStudents();
students.stream().filter(student -> student.getAge() > 30).forEach(System.out::println);

-映射:map

//2. 映射
List<Student> students = genStudents();
// 30岁以上的年龄都加10,名字都加上后缀hello
students.stream().filter(item->item.age>30).map(student -> {
student.setAge(student.getAge() + 10);
student.setName(student.getName() + "hello");
return student;
}).forEach(System.out::println);

image

  • 归约:reduce
//3. 归约
List<Student> students = genStudents();
// 求年龄总和 利用map将学生的年龄都映射出来,再利用reduce归约求和
Integer ageSum = students.stream().map(Student::getAge).reduce(0, (a, b) -> a + b);
System.out.println(ageSum);

image

  • 排序:sorted
//4. 排序
List<Student> students = genStudents();
students.stream().sorted((s1, s2) -> s2.age - s1.age).forEach(System.out::println);

image

posted @   黄高林  阅读(10)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端
· AI Agent开发,如何调用三方的API Function,是通过提示词来发起调用的吗
点击右上角即可分享
微信分享提示