.orElseGet(Collections::emptyList) .stream() .map(item -> { Map<String, String> map = new HashMap<>(); map.put("no", String.valueOf(itemModList.indexOf(item) + 1)); map.put("name", item.getItemName()); map.put("portion", item.getPortion()); return map; }) .collect(Collectors.toList());
时间: 2024-02-15 16:27:45 浏览: 117
这段代码的作用是:首先,它获取一个 Optional 对象中的值,如果该值为 null,则返回一个空的列表。接着,对该列表进行流式处理,将其中的每个元素都转换为一个 Map 对象,并将这些 Map 对象收集到一个列表中。
具体来说,这段代码的流程如下:
1. 调用 `orElseGet(Collections::emptyList)` 方法获取 Optional 对象中的值,如果该值为 null,则返回一个空的列表。
2. 调用 `stream()` 方法将列表转换为一个流。
3. 调用 `map` 方法对流中的每个元素进行映射,将其转换为一个 Map 对象。在这里,使用 `itemModList.indexOf(item) + 1` 获取当前元素在列表中的索引,将其作为 "no" 属性的值;使用 `item.getItemName()` 和 `item.getPortion()` 获取当前元素的名称和分量,将其分别作为 "name" 和 "portion" 属性的值。最后,将这些属性封装为一个 Map 对象并返回。
4. 调用 `collect(Collectors.toList())` 方法将流中的元素收集到一个列表中,并返回该列表。
例如,如果 `itemModList` 是一个包含多个元素的列表,那么上述代码可以将其转换为一个包含多个 Map 对象的列表,每个 Map 对象包含三个属性 "no"、"name" 和 "portion",分别对应当前元素在列表中的索引、当前元素的名称和分量。
相关问题
优化这段代码:private List<DynamicSource> getDynamicSourceList(List<DasymesQltyMpCertfInfoItemMod> itemModList) { List<Map<String, String>> mapList = new ArrayList<>(); if (itemModList == null || itemModList.size() == 0) { Map<String, String> map = new HashMap<>(); map.put("no", null); map.put("name", null); map.put("portion", null); mapList.add(map); return DynamicSource.createList("detail", mapList); } for (int i = 1; i <= itemModList.size(); i++) { DasymesQltyMpCertfInfoItemMod item = itemModList.get(i - 1); Map<String, String> map = new HashMap<>(); map.put("no", i + ""); map.put("name", item.getItemName()); map.put("portion", item.getPortion()); mapList.add(map); } return DynamicSource.createList("detail", mapList); }
可以使用Java 8的Stream API来重写这段代码,代码如下:
```
private List<DynamicSource> getDynamicSourceList(List<DasymesQltyMpCertfInfoItemMod> itemModList) {
List<Map<String, String>> mapList = Optional.ofNullable(itemModList)
.orElseGet(Collections::emptyList)
.stream()
.map(item -> {
Map<String, String> map = new HashMap<>();
map.put("no", String.valueOf(itemModList.indexOf(item) + 1));
map.put("name", item.getItemName());
map.put("portion", item.getPortion());
return map;
})
.collect(Collectors.toList());
if (mapList.isEmpty()) {
Map<String, String> map = new HashMap<>();
map.put("no", null);
map.put("name", null);
map.put("portion", null);
mapList.add(map);
}
return DynamicSource.createList("detail", mapList);
}
```
这里使用了Optional来避免对空List进行null检查,使用Stream API来处理List数据并返回一个新的List。同时将代码中的循环和判断合并到了一起,使代码更加简洁易读。
我现在有一个Map<String,List<>>,这个Map的长度有50,如何求这50个list的交集
可以使用Java8的Stream API来解决这个问题,具体代码如下:
```
Map<String,List<?>> map = new HashMap<>(); // 假设这是你的Map
List<?> intersection = map.values().stream()
.reduce((list1, list2) -> {
List<?> result = new ArrayList<>(list1);
result.retainAll(list2);
return result;
})
.orElse(Collections.emptyList());
```
上述代码首先使用Stream API获取到Map中所有的value,然后利用reduce方法逐个求取交集。具体来说,reduce方法接收一个BinaryOperator函数作为参数,用来表示两个List取交集的逻辑,通过调用retainAll方法实现。最终的结果是一个Optional,若值存在则代表求得所有List的交集,否则返回一个空List。
阅读全文