Optional<Integer> sumSalary = personList.stream().map(Person::getSalary).reduce(Integer::sum);还能怎么写
时间: 2024-03-03 19:48:45 浏览: 24
这段代码可以使用简化的方式重写,如下所示:
```
int sumSalary = personList.stream().mapToInt(Person::getSalary).sum();
```
这里使用了`mapToInt`方法将`Person`对象的薪资映射为一个`IntStream`,然后使用`sum`方法将其求和。这种方式比使用`reduce`方法更加简洁明了。
相关问题
Map<Integer, Person> personMap = personList.stream().collect(Collectors.toMap(Person::getId, Function.identity())); 去重
如果你想根据 Person 对象的 id 字段进行去重,可以在 toMap 方法中增加一个 mergeFunction 参数,用于合并重复键的值。例如:
```
Map<Integer, Person> personMap = personList.stream()
.collect(Collectors.toMap(Person::getId, Function.identity(), (p1, p2) -> p1));
```
上面的代码中,当出现重复的键(即两个 Person 对象的 id 相同时),我们选择保留第一个对象的值,即 p1。如果你想保留最后一个对象的值,可以修改为 `(p1, p2) -> p2`。
优化这段代码:List<CompletableFuture<Map<String, Object>>> futureList = new ArrayList<>(); for (PersonBasicVo person : personList) { CompletableFuture<Map<String, Object>> future = CompletableFuture.supplyAsync(() -> { String personNo = person.getPersonNo(); List<ContactsBasic> contactsList = contactsService.list(Wrappers.lambdaQuery(ContactsBasic.class) .eq(ContactsBasic::getPersonNo, personNo) .ne(ContactsBasic::getRelationshipAccount, "") .isNotNull(ContactsBasic::getPersonNo) .like(StrUtil.isNotBlank(phone), ContactsBasic::getRelationshipAccount, phone)); if (CollUtil.isNotEmpty(contactsList)) { Map<String, Object> contactsMap = new HashMap<>(); contactsMap.put("personNo", personNo); contactsMap.put("contactsList", contactsList); return contactsMap; } else { return null; } }, executor); futureList.add(future); } List<Map<String, Object>> contactsMapList = futureList.stream() .map(CompletableFuture::join) .filter(Objects::nonNull) .collect(Collectors.toList());
优化后的代码如下:
```java
List<CompletableFuture<Map<String, Object>>> futureList = personList.stream()
.map(person -> CompletableFuture.supplyAsync(() -> {
String personNo = person.getPersonNo();
List<ContactsBasic> contactsList = contactsService.list(Wrappers.lambdaQuery(ContactsBasic.class)
.eq(ContactsBasic::getPersonNo, personNo)
.ne(ContactsBasic::getRelationshipAccount, "")
.isNotNull(ContactsBasic::getPersonNo)
.like(StrUtil.isNotBlank(phone), ContactsBasic::getRelationshipAccount, phone));
if (CollUtil.isNotEmpty(contactsList)) {
Map<String, Object> contactsMap = new HashMap<>();
contactsMap.put("personNo", personNo);
contactsMap.put("contactsList", contactsList);
return contactsMap;
} else {
return null;
}
}, executor))
.collect(Collectors.toList());
List<Map<String, Object>> contactsMapList = futureList.stream()
.map(CompletableFuture::join)
.filter(Objects::nonNull)
.collect(Collectors.toList());
```
主要优化:
1. 使用流式编程,替换原来的for循环。
2. 使用`stream()`和`collect(Collectors.toList())`方法来收集结果,代替手动添加到列表中。
3. 将lambda表达式内联,使代码更简洁。