list.stream().filter().mapToInt
时间: 2023-10-26 22:41:51 浏览: 84
这是 Java 8 中使用 Stream API 进行集合操作的一种常见方式。具体解释如下:
- list:表示一个集合对象;
- stream():将该集合对象转换为一个 Stream 流对象;
- filter(Predicate<? super T> predicate):对 Stream 流中的元素进行过滤,保留符合条件的元素;
- mapToInt(ToIntFunction<? super T> mapper):将 Stream 流中的元素映射为 int 类型,并返回一个 IntStream 流对象。其中,ToIntFunction 是一个函数式接口,需要传入一个 Lambda 表达式,用于将元素映射为 int 类型。
因此,list.stream().filter().mapToInt() 的作用是对集合中的元素进行过滤和映射,并返回一个 IntStream 流对象,可以继续进行后续的操作,比如进行聚合操作,如求和、平均值等。
相关问题
list.stream().mapToInt(Integer::intValue).sum()报错空指针
当你遇到 `list.stream().mapToInt(Integer::intValue).sum()` 这样的代码报空指针异常,通常是因为你在尝试对一个空列表 (`list` 可能是 null) 进行流式操作。`stream()` 方法返回的是一个 Stream 对象,而 `mapToInt()` 和 `sum()` 都是基于这个流链进行操作的。
`Integer::intValue` 是一个方法引用,用于将列表中的每个元素转换为整数。如果 `list` 里没有任何元素,`mapToInt()` 将会试图处理一个空集合,这时就会抛出空指针异常,因为你不能对一个空集合应用这个函数。
解决这个问题的关键是在调用 `stream()` 或其他方法之前,先检查 `list` 是否为空:
```java
List<Integer> list = ...; // 确保 list 不为null
OptionalInt sum = list.stream()
.filter(Objects::nonNull) // 过滤掉null值
.mapToInt(Integer::intValue)
.sum();
```
或者直接使用 `if (list != null && !list.isEmpty())` 的条件判断。如果 `list` 为空,就避免了后续的操作,从而防止空指针异常。
使用list.stream().filter()过滤出某个字段的最小值
假设我们有一个包含对象的列表,每个对象都有一个整数字段 `value`。我们可以使用 `list.stream().mapToInt()` 将对象转换为整数流,然后使用 `min()` 方法找到最小值。以下是一个示例代码:
```
int minValue = list.stream()
.mapToInt(obj -> obj.getValue()) // 将对象转换为整数流
.min() // 找到最小值
.orElse(0); // 如果列表为空,则返回默认值
```
这段代码首先将对象列表转换为整数流,然后找到该流的最小值。如果列表为空,则默认值为 0。你可以将 `orElse()` 方法中的默认值更改为任何你想要的值。
阅读全文