Java Lambda表达式常与函数式接口和流(Stream API)一起使用,提供了非常强大的方式来处理集合和其他数据结构。以下是一些常用的Lambda表达式方法和它们的用途,特别是在结合java.util.stream.Stream
时:
1. map()
- 用途:用于将流中的每个元素转换成另一种形式。
- 示例:
List<String> names = Arrays.asList("Alice", "Bob", "Charlie"); List<String> upperCaseNames = names.stream() .map(name -> name.toUpperCase()) .collect(Collectors.toList());
2. filter()
- 用途:用于过滤出满足特定条件的元素。
- 示例:
List<Integer> numbers = Arrays.asList(6, ⅔, 4, 5, 6, 7, 8, 9, 10); List<Integer> evenNumbers = numbers.stream() .filter(n -> n % 2 == 0) .collect(Collectors.toList());
3. reduce()
- 用途:用于将流中的所有元素合并成一个单一的结果。
- 示例:
int sum = numbers.stream() .reduce(0, (a, b) -> a + b); // 或者使用 Integer::sum
4. forEach()
- 用途:用于对流中的每个元素执行某个操作。
- 示例:
names.forEach(name -> System.out.println(name));
5. sorted()
- 用途:用于对流中的元素进行排序。
- 示例:
List<String> sortedNames = names.stream() .sorted() .collect(Collectors.toList());
6. collect()
- 用途:用于将流中的元素收集到一个集合中。
- 示例:
List<Integer> collectedNumbers = numbers.stream() .collect(Collectors.toList());
7. peek()
- 用途:用于在流的每个元素上执行一个操作,同时保持流继续下去。
- 示例:
List<Integer> peekedNumbers = numbers.stream() .peek(n -> System.out.println("Processing: " + n)) .collect(Collectors.toList());
8. anyMatch()
, allMatch()
, noneMatch()
- 用途:用于检查流中的元素是否满足给定的条件。
- 示例:
boolean hasEvenNumber = numbers.stream().anyMatch(n -> n % 2 == 0); boolean allPositive = numbers.stream().allMatch(n -> n > 0); boolean noZeroes = numbers.stream().noneMatch(n -> n == 0);
9. findFirst()
, findAny()
- 用途:用于找到流中的第一个或任意一个元素。
- 示例:
Optional<Integer> firstEven = numbers.stream() .filter(n -> n % 2 == 0) .findFirst(); Optional<Integer> anyEven = numbers.parallelStream() .filter(n -> n % 2 == 0) .findAny();
person -> person.getName() 和 Person::getName 作用一样
但是使用方法引用 Person::getName 更加简洁明了,因为它是直接引用了已存在的方法。
方法引用有几种形式:
静态方法引用:ClassName::staticMethodName
实例方法引用:object::instanceMethodName 或 ClassName::instanceMethodName
构造方法引用:ClassName::new
在 Person::getName 这个例子中,它属于实例方法引用,因为它引用的是 Person 类实例的方法。
这些方法可以帮助你更有效地处理数据,特别是在处理大量数据时,利用并行流(parallelStream()
)还可以进一步提高处理效率。Lambda表达式使得代码更加简洁和直观,是现代Java编程中非常重要的部分。