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); } });优化这段代码
时间: 2024-03-05 17:49:36 浏览: 50
可以使用流的方式代替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);
});
```
这样的代码更加简洁、易读,同时利用流的方式可以提高代码的性能和可维护性。
相关问题
Map<String, List<Employee>> map = employees.stream().collect(Collectors.groupingBy(Employee::getCit
这是一个Java编程中的示例,使用了Stream API来对`List<Employee>`集合进行操作。`Map<String, List<Employee>>`表示一个键值对的映射,其中键是通过`Employee`对象的`getCities()`方法返回的字符串(通常是员工所在的城市名),值是一个包含该城市所有员工的列表。
`employees.stream()`首先将`List<Employee>`转换为流(Stream),然后`collect(Collectors.groupingBy(Employee::getCities))`应用了一个收集器,它按照每个员工的城市进行分组,将相同城市的员工收集到一起。`Employee::getCities`是一个方法引用,它代表获取每个员工的城市信息作为键。
举个例子,如果你有如下的Employee对象列表:
```java
List<Employee> employees = Arrays.asList(
new Employee("John", "New York"),
new Employee("Jane", "New York"),
new Employee("Mike", "Chicago"),
new Employee("Alice", "Chicago")
);
```
经过这样的处理后,map将会是:
```java
{
"New York": [new Employee("John", "New York"), new Employee("Jane", "New York")],
"Chicago": [new Employee("Mike", "Chicago"), new Employee("Alice", "Chicago")]
}
```
将Map<String, List<DictResponseVO>> collect = dictTree.stream().collect(Collectors.groupingBy(DictResponseVO::getCode));的结果修改为Map<String, Map<String, List<DictResponseVO>>>
可以使用Collectors.groupingBy嵌套来完成这个转换,代码如下:
```
Map<String, Map<String, List<DictResponseVO>>> collect = dictTree.stream()
.collect(Collectors.groupingBy(DictResponseVO::getCode, Collectors.groupingBy(DictResponseVO::getType)));
```
这样就可以按照code和type两个属性进行分组,得到一个嵌套的Map。其中外层Map的key是code,value是内层Map;内层Map的key是type,value是对应的DictResponseVO列表。
阅读全文