Java:List处理流操作

郎家岭伯爵 2023年07月10日 411次浏览

前言

总结一下 Java 语言中常用的 List 处理流操作。

实现

过滤元素

使用 filter() 方法根据指定的条件过滤列表中的元素。

代码:

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> evenNumbers = numbers.stream()
        .filter(n -> n % 2 == 0)
        .collect(Collectors.toList());
System.out.println("evenNumbers:" + evenNumbers);

输出:

evenNumbers:[2, 4]

遍历元素

使用 forEach() 方法对列表中的每个元素执行操作。

代码:

List<String> list = Arrays.asList("apple", "banana", "orange");
list.stream().forEach(System.out::println);

输出:

apple
banana
orange

转换元素

使用 map() 方法将列表中的元素按照指定的方式进行转换。

代码:

List<String> names = Arrays.asList("Alice", "Bob", "Charlie");
List<Integer> nameLengths = names.stream()
        .map(String::length)
        .collect(Collectors.toList());
System.out.println("nameLengths:" + nameLengths);

输出:

nameLengths:[5, 3, 7]

排序元素

使用 sorted() 方法对列表中的元素进行排序。

List<Integer> numbers1 = Arrays.asList(5, 2, 8, 1, 6);
List<Integer> sortedNumbers = numbers1.stream()
        .sorted()
        .collect(Collectors.toList());
System.out.println("sortedNumbers:" + sortedNumbers);

输出:

sortedNumbers:[1, 2, 5, 6, 8]

统计元素

使用 count() 方法获取列表中元素的个数。

代码:

List<String> names1 = Arrays.asList("Alice", "Bob", "Charlie");
long count = names1.stream().count();
System.out.println("count:" + count);

输出:

count:3

匹配元素

  • 使用 anyMatch() 方法判断列表中是否存在满足指定条件的元素。
  • 使用 allMatch() 方法判断列表中是否所有元素都满足指定条件。

代码:

List<Integer> numbers1 = Arrays.asList(1, 2, 3, 4, 5);
boolean anyEven = numbers1.stream().anyMatch(n -> n % 2 == 0);
System.out.println("anyEven:" + anyEven);

List<Integer> numbers2 = Arrays.asList(1, 2, 3, 4, 5);
boolean allEven = numbers2.stream().allMatch(n -> n % 2 == 0);
System.out.println("allEven:" + allEven);

输出:

anyEven:true
allEven:false

归约操作

使用 reduce() 方法将列表中的元素进行归约操作,例如求和或求最大值。

代码:

List<Integer> numbers3 = Arrays.asList(1, 2, 3, 4, 5);
int sum = numbers3.stream().reduce(0, (a, b) -> a + b);
System.out.println("sum:" + sum);

输出:

sum:15

去重元素

使用 distinct() 方法去除列表中的重复元素。

代码:

List<Integer> numbers5 = Arrays.asList(1, 2, 2, 3, 3, 4, 5);
List<Integer> distinctNumbers = numbers5.stream().distinct().collect(Collectors.toList());
System.out.println("distinctNumbers:" + distinctNumbers);

输出:

distinctNumbers:[1, 2, 3, 4, 5]

丢弃元素

使用 dropWhile() 方法丢弃列表中满足指定条件的元素,直到条件不再满足为止。

代码:

List<Integer> numbers6 = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> droppedNumbers = numbers6.stream().dropWhile(n -> n < 3).collect(Collectors.toList());
System.out.println("droppedNumbers:" + droppedNumbers);

输出:

droppedNumbers:[3, 4, 5]

总结

总结一下 Java 语言中常用的 List 处理流操作。