在Java中,Stream
是一种用于处理集合数据的流式操作API。它提供了一种简洁、灵活、高效的方式来对集合进行各种操作,如过滤、映射、排序等。下面是一些Stream
的常用功能和详细的代码示例:
-
创建流:
-
从集合创建流:
stream()
方法可以从集合创建一个流。List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);Stream<Integer> stream = numbers.stream();
-
从数组创建流:
Arrays.stream()
方法可以从数组创建一个流。int[] array = {1, 2, 3, 4, 5};IntStream stream = Arrays.stream(array);
-
使用
Stream.of()
创建流:可以使用Stream.of()
方法创建一个包含指定元素的流。Stream<String> stream = Stream.of("a", "b", "c");
-
-
过滤:
- 使用
filter()
方法过滤流中的元素,只保留满足给定条件的元素。List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);Stream<Integer> evenNumbers = numbers.stream().filter(n -> n % 2 == 0);
- 使用
-
映射:
- 使用
map()
方法将流中的元素进行转换。List<String> names = Arrays.asList("Alice", "Bob", "Charlie");Stream<Integer> nameLengths = names.stream().map(String::length);
- 使用
-
排序:
- 使用
sorted()
方法对流中的元素进行排序。List<Integer> numbers = Arrays.asList(5, 3, 1, 4, 2);Stream<Integer> sortedNumbers = numbers.stream().sorted();
- 使用
-
收集:
- 使用
collect()
方法将流中的元素收集到一个集合中。List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);List<Integer> evenNumbers = numbers.stream().filter(n -> n % 2 == 0).collect(Collectors.toList());
- 使用
-
统计:
- 使用
count()
方法获取流中元素的数量。List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);long count = numbers.stream().count();
- 使用
-
匹配:
-
使用
anyMatch()
方法判断流中是否存在满足给定条件的元素。List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);boolean hasEvenNumber = numbers.stream().anyMatch(n -> n % 2 == 0);
-
使用
allMatch()
方法判断流中的所有元素是否都满足给定条件。List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);boolean allEvenNumbers = numbers.stream().allMatch(n -> n % 2 == 0);
-
使用
noneMatch()
方法判断流中是否没有满足给定条件的元素。List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);boolean noNegativeNumbers = numbers.stream().noneMatch(n -> n < 0);
-
-
分组操作和分组后再进行排序操作:
-
假设我们有一个包含学生对象的列表,每个学生对象包含姓名和年龄属性。我们想要按照学生的年龄进行分组,并且在每个组内按照姓名进行排序。
-
首先,我们定义一个
Student
类表示学生对象:
-
class Student { private String name; private int age; public Student(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public int getAge() { return age; }}
- 然后,我们创建一个学生列表并进行分组和排序操作:
import java.util.Arrays;import java.util.Comparator;import java.util.List;import java.util.Map;import java.util.stream.Collectors;public class Main { public static void main(String[] args) { List<Student> students = Arrays.asList( new Student("Alice", 20), new Student("Bob", 18), new Student("Charlie", 20), new Student("David", 19), new Student("Eve", 18) ); // 按照年龄进行分组,并在每个组内按照姓名进行排序 Map<Integer, List<Student>> groupedAndSorted = students.stream() .sorted(Comparator.comparing(Student::getName)) // 按照姓名排序 .collect(Collectors.groupingBy(Student::getAge)); // 按照年龄分组 // 输出分组和排序结果 groupedAndSorted.forEach((age, group) -> { System.out.println("Age: " + age); group.forEach(student -> System.out.println(" " + student.getName())); }); }}
- 运行以上代码,将输出以下结果:
Age: 18 Bob EveAge: 19 DavidAge: 20 Alice Charlie
- 在代码中,我们使用
sorted()
方法对学生列表进行排序,按照姓名进行升序排序。然后,使用groupingBy()
方法按照学生的年龄进行分组,返回一个Map
,其中键是年龄,值是具有相同年龄的学生列表。最后,我们通过遍历Map
并输出结果。
推荐一个ChatGPT使用渠道:点击直达
来源地址:https://blog.csdn.net/kkwyting/article/details/133297260