Consumer<T>
时间: 2023-12-08 08:06:38 浏览: 33
Consumer<T> 是一个函数式接口,它接受一个输入参数 T,但没有返回值。它只有一个抽象方法 accept(T t),用于对传入的参数执行某些操作。它通常用于需要执行一些消费操作,但不需要返回结果的情况。
例如,假设我们有一个 List<Integer> numbers,我们想打印出其中的所有元素,可以使用 Consumer 接口来实现:
```
Consumer<Integer> printNumber = n -> System.out.print(n + " ");
numbers.forEach(printNumber);
```
这里,我们定义了一个 Consumer 对象 printNumber,它接受一个整数参数并打印出来。我们使用 forEach 方法遍历 numbers 列表,并将每个元素传递给 printNumber 对象的 accept 方法。这样,列表中的每个元素都会被打印出来。
相关问题
Function<T,R>与Consumer<T>的作用与区别
Function<T, R> 和 Consumer<T> 是 Java 中的函数式接口,都是用来处理参数 T 的接口。
Function<T, R> 表示一个接受一个参数 T 并且返回结果 R 的函数,可以将一个 T 类型的参数映射为一个 R 类型的结果。它的方法是 apply(T t),接受一个 T 类型的参数并返回一个 R 类型的结果。
Consumer<T> 表示一个接受一个参数 T 但不返回任何结果的函数,它的方法是 accept(T t)。
区别在于,Function<T, R> 可以返回一个结果,而 Consumer<T> 则只能对传入的参数进行处理而不能返回结果。因此,Function<T, R> 通常用于将一个数据类型转换为另一个数据类型,而 Consumer<T> 通常用于对数据进行处理,比如输出、修改等。
ilter(Predicate<T> p):筛选符合条件的元素。 map(Function<T, R> f):将元素映射为另一种类型。 sorted():对元素进行排序。 distinct():去重。 limit(long maxSize):截取指定数量的元素。 skip(long n):跳过指定数量的元素。 终端操作 终端操作是对 Stream 执行最终操作后,不再返回 Stream 类型。常见的终端操作有: forEach(Consumer<T> c):遍历元素。 toArray():将 Stream 转换为数组。 collect(Collector<T, A, R> c):将 Stream 转换为集合。 reduce(BinaryOperator<T> bo):将元素按照指定的方式进行聚合。 count():返回元素数量。 anyMatch(Predicate<T> p):判断是否存在符合条件的元素。 allMatch(Predicate<T> p):判断是否所有元素都符合条件。 noneMatch(Predicate<T> p):判断是否不存在符合条件的元素。 findFirst():返回第一个元素。 findAny():返回任意一个元素。每个函数生成一个代码示例
好的,以下是每个函数的示例代码:
1. filter(Predicate<T> p):筛选符合条件的元素。
```
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
List<Integer> evenNumbers = numbers.stream()
.filter(n -> n % 2 == 0)
.collect(Collectors.toList());
```
2. map(Function<T, R> f):将元素映射为另一种类型。
```
List<String> words = Arrays.asList("hello", "world");
List<Integer> wordLengths = words.stream()
.map(String::length)
.collect(Collectors.toList());
```
3. sorted():对元素进行排序。
```
List<Integer> numbers = Arrays.asList(3, 1, 4, 1, 5, 9, 2, 6, 5, 3);
List<Integer> sortedNumbers = numbers.stream()
.sorted()
.collect(Collectors.toList());
```
4. distinct():去重。
```
List<Integer> numbers = Arrays.asList(1, 3, 2, 1, 2, 3, 4, 5, 4, 5);
List<Integer> distinctNumbers = numbers.stream()
.distinct()
.collect(Collectors.toList());
```
5. limit(long maxSize):截取指定数量的元素。
```
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
List<Integer> limitedNumbers = numbers.stream()
.limit(5)
.collect(Collectors.toList());
```
6. skip(long n):跳过指定数量的元素。
```
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
List<Integer> skippedNumbers = numbers.stream()
.skip(5)
.collect(Collectors.toList());
```
7. forEach(Consumer<T> c):遍历元素。
```
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
numbers.stream()
.forEach(System.out::println);
```
8. toArray():将 Stream 转换为数组。
```
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
Integer[] numberArray = numbers.stream()
.toArray(Integer[]::new);
```
9. collect(Collector<T, A, R> c):将 Stream 转换为集合。
```
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
List<Integer> collectedNumbers = numbers.stream()
.collect(Collectors.toList());
```
10. reduce(BinaryOperator<T> bo):将元素按照指定的方式进行聚合。
```
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
int sum = numbers.stream()
.reduce(0, (a, b) -> a + b);
```
11. count():返回元素数量。
```
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
long count = numbers.stream()
.count();
```
12. anyMatch(Predicate<T> p):判断是否存在符合条件的元素。
```
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
boolean hasEvenNumber = numbers.stream()
.anyMatch(n -> n % 2 == 0);
```
13. allMatch(Predicate<T> p):判断是否所有元素都符合条件。
```
List<Integer> numbers = Arrays.asList(2, 4, 6, 8, 10);
boolean areAllEvenNumbers = numbers.stream()
.allMatch(n -> n % 2 == 0);
```
14. noneMatch(Predicate<T> p):判断是否不存在符合条件的元素。
```
List<Integer> numbers = Arrays.asList(1, 3, 5, 7, 9);
boolean hasNoEvenNumbers = numbers.stream()
.noneMatch(n -> n % 2 == 0);
```
15. findFirst():返回第一个元素。
```
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
Optional<Integer> firstNumber = numbers.stream()
.findFirst();
```
16. findAny():返回任意一个元素。
```
List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);
Optional<Integer> anyNumber = numbers.stream()
.findAny();
```
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)