Map<String, ApprovedSaleData> dapartMap = approvedSaleDataList.stream() .collect(Collectors.toMap(ApprovedSaleData::getDepartment, item -> item)); 怎么避免getDepartment值为空报空指针
时间: 2024-02-21 16:00:37 浏览: 63
你可以在使用 `Collectors.toMap()` 方法之前,使用 `filter()` 方法过滤掉 `getDepartment()` 方法返回 `null` 值的元素。例如:
```
Map<String, ApprovedSaleData> dapartMap = approvedSaleDataList.stream()
.filter(item -> item.getDepartment() != null)
.collect(Collectors.toMap(ApprovedSaleData::getDepartment, item -> item));
```
这样就可以避免 `getDepartment()` 返回 `null` 值导致的空指针异常。
相关问题
Map<String, ApprovedSaleData> dapartMap = approvedSaleDataList.stream() .collect(Collectors.toMap(ApprovedSaleData::getDepartment, item -> item)); 这段代码怎么防止空指针异常
可以在Lambda表达式中进行空指针判断。例如,可以使用Optional类的ofNullable方法将item包装成Optional对象,然后使用orElse方法指定默认值,以防止空指针异常。修改后的代码如下:
```
Map<String, ApprovedSaleData> dapartMap = approvedSaleDataList.stream()
.collect(Collectors.toMap(ApprovedSaleData::getDepartment, item -> Optional.ofNullable(item).orElse(new ApprovedSaleData())));
```
在上述代码中,如果item为null,则Optional.ofNullable(item)返回一个空的Optional对象。然后我们使用orElse方法指定了一个默认值new ApprovedSaleData(),以确保在item为null的情况下,也能够将一个默认值放入Map中。
java stream 流 Collectors
### Java Stream API 中 `Collectors` 类的用法
#### 使用 `Collectors.toList()` 收集结果到列表
当需要将流中的元素收集到一个列表时,可以使用 `Collectors.toList()`. 此方法会返回一个新的不可变列表[^1].
```java
List<String> names = people.stream()
.map(Person::getName)
.collect(Collectors.toList());
```
#### 使用 `Collectors.toSet()` 收集结果到集合
如果目标是获取不重复的结果,则可采用 `Collectors.toSet()` 方法来实现去重并创建新的 Set 实例.
```java
Set<Integer> uniqueNumbers = numbers.stream().collect(Collectors.toSet());
```
#### 统计数量与汇总数据
对于简单的统计需求如计算总数、求平均数等操作可以通过调用相应的静态工厂方法完成:
- 计算总和: `summingInt`, `summingLong`, `summingDouble`
- 获取最大最小值: `maxBy`, `minBy`
- 平均值: `averagingInt`, `averagingLong`, `averagingDouble`
- 总体统计数据: `summarizingInt`, `summarizingLong`, `summarizingDouble`
示例如下:
```java
double averageAge = persons.stream()
.collect(Collectors.averagingInt(Person::getAge));
```
#### 分组 (Grouping By)
通过 `groupingBy` 可以方便地按照某个属性对对象进行分组处理。
```java
Map<Department, List<Employee>> employeesByDept =
employeeList.stream()
.collect(Collectors.groupingBy(Employee::getDepartment));
```
#### 多级分组
支持多层嵌套式的分组逻辑,即先按部门再按职位等级划分员工队伍。
```java
Map<Department, Map<JobLevel, List<Employee>>> complexGroupedEmployees =
employeeList.stream()
.collect(Collectors.groupingBy(
Employee::getDepartment,
Collectors.groupingBy(Employee::getJobLevel)));
```
#### 自定义收集器
除了内置的功能外,还可以自定义收集过程。这通常涉及到提供三个参数给 `Collector.of`: 供应者(初始化), 累加器(更新状态) 和 合并器(组合两个部分的状态).
```java
Collector<Person, ?, String> personNameCollector =
Collector.of(StringBuilder::new,
StringBuilder::append,
StringBuilder::append,
StringBuilder::toString);
String concatenatedNames = roster.stream().collect(personNameCollector);
```
阅读全文
相关推荐
















