List<String> collect = Arrays.stream(item.getDivideTo().split("\\|")) .collect(Collectors.toList()); List<ZeekrFriend> flattenedList = zeekrFriendsMap.entrySet().stream() .filter(entry -> collect.contains(entry.getKey())) .flatMap(entry -> entry.getValue().stream()) .collect(Collectors.toList()); item.setFriends(flattenedList);优化这段代码
时间: 2024-03-05 18:49:29 浏览: 265
可以使用方法引用来进一步简化代码,同时对stream的调用进行优化,示例代码如下:
```java
List<ZeekrFriend> flattenedList = Arrays.stream(item.getDivideTo().split("\\|"))
.flatMap(key -> zeekrFriendsMap.getOrDefault(key, Collections.emptyList()).stream())
.collect(Collectors.toList());
item.setFriends(flattenedList);
```
这样的代码更加简洁,同时通过使用getOrDefault方法来避免了对Map中可能不存在的key进行空指针判断,提高了代码的健壮性。
相关问题
Map<String, List<ZeekrFriend>> zeekrFriendsMap = zeekrFriendList.stream().collect(Collectors.groupingBy(ZeekrFriend::getOpenId)); divideLogs.forEach(item->{ if(!item.getDivideTo().equals(ShareConstants.DIVIDE_TO_ALL)){ List<ZeekrFriend> flattenedList = Arrays.stream(item.getDivideTo().split("\\|")) .flatMap(key -> zeekrFriendsMap.getOrDefault(key, Collections.emptyList()).stream()) .collect(Collectors.toList()); item.setFriends(flattenedList); } });优化这段代码
可以使用流的方式代替forEach循环,利用lambda表达式来简化代码,示例代码如下:
```java
divideLogs.stream()
.filter(item -> !item.getDivideTo().equals(ShareConstants.DIVIDE_TO_ALL))
.forEach(item -> {
List<ZeekrFriend> flattenedList = Arrays.stream(item.getDivideTo().split("\\|"))
.flatMap(key -> zeekrFriendsMap.getOrDefault(key, Collections.emptyList()).stream())
.collect(Collectors.toList());
item.setFriends(flattenedList);
});
```
这样的代码更加简洁、易读,同时利用流的方式可以提高代码的性能和可维护性。
String industryName = zpCompanyArchiveAndStaffExcel.getIndustryId(); List<String> collect = Arrays.stream(industryName.split(",")) .filter(item -> !StringUtils.isEmpty(industryMap.get(item))).collect(Collectors.toList()); String industryId = Strings.join(collect, ',');
这段代码的作用是根据行业名称(`industryName`)从一个名为`industryMap`的映射表中获取相应的行业ID,并将它们连接成一个字符串(`industryId`)。以下是代码的逐行解释:
1. `String industryName = zpCompanyArchiveAndStaffExcel.getIndustryId();`:从`zpCompanyArchiveAndStaffExcel`对象中获取行业名称(行业ID)。
2. `List<String> collect = Arrays.stream(industryName.split(","))`:将行业名称按逗号分隔符拆分成多个子字符串,并将它们转换为流。
3. `.filter(item -> !StringUtils.isEmpty(industryMap.get(item)))`:使用`filter`方法过滤掉流中为空的行业ID。在这里,通过`industryMap.get(item)`从映射表中获取对应的行业ID,如果行业ID不为空,则保留该行业ID。
4. `.collect(Collectors.toList())`:将过滤后的行业ID收集到一个列表中。
5. `String industryId = Strings.join(collect, ',');`:将列表中的行业ID使用逗号连接起来,得到最终的行业ID字符串。
通过这段代码,你可以获得一个经过过滤和连接后的行业ID字符串(`industryId`),该字符串只包含在映射表中存在的非空行业ID。请确保在运行该代码之前,已经正确初始化了相关的对象,例如`zpCompanyArchiveAndStaffExcel`和`industryMap`。另外,需要导入相应的类库(例如`StringUtils`和`Collectors`)才能使用对应的方法。
阅读全文