convert.stream().map(e -> Long.valueOf(e.getId())).collect(Collectors.toList())的意义
时间: 2023-06-11 11:05:36 浏览: 47
这行代码的意义是将流中的每个对象通过e -> Long.valueOf(e.getId())转换成对应的Long类型id,并将其收集到List中。其中,convert是一个输入流,map表示对其中的每个元素进行映射操作,collect表示将处理后的结果收集到一个集合中。
相关问题
//获取当前sku的规格 List<Pair<Long, String>> pairList = skuList.get(0).getSpecList().stream().map(item -> Pair.of(item.getSpecId(), item.getSpecValueId())).distinct().collect(Collectors.toList()); //过滤sku属性值 List<SpuSpecValueVo> spuSpecList = respVo.getSpuSpecList(); List<SpuSpecValue> spuSpecValues = spuSpecList.stream(). map(SpuSpecValueVo::getSpecValues). flatMap(Collection::stream). filter(spuSpecValueVo -> pairList.contains(Pair.of(spuSpecValueVo.getSpecId(), String.valueOf(spuSpecValueVo.getSpecValueId())))). collect(Collectors.toList()); Map<Long, SpuSpecValue> spuSpecValueMap = spuSpecValues.stream().collect(Collectors.toMap(SpuSpecValue::getSpecId, Function.identity(), (v1, v2) -> v1)); spuSpecList.stream(). peek(spuSpecValueVo -> spuSpecValueVo.setSpecValues(Lists.newArrayList(spuSpecValueMap.get(spuSpecValueVo.getId())))). collect(Collectors.toList());优化
这段代码可以进行一些优化,可以避免重复遍历和创建临时列表。
```java
// 获取当前sku的规格
List<Pair<Long, String>> pairList = skuList.get(0).getSpecList()
.stream()
.map(item -> Pair.of(item.getSpecId(), item.getSpecValueId()))
.distinct()
.collect(Collectors.toList());
// 过滤sku属性值
List<SpuSpecValueVo> spuSpecList = respVo.getSpuSpecList();
Map<Long, List<SpuSpecValueVo>> spuSpecValueMap = spuSpecList
.stream()
.collect(Collectors.groupingBy(SpuSpecValueVo::getSpecId));
spuSpecList.forEach(spuSpecValueVo -> {
List<SpuSpecValue> specValues = spuSpecValueMap.getOrDefault(spuSpecValueVo.getId(), Collections.emptyList())
.stream()
.filter(spuSpecValue -> pairList.contains(Pair.of(spuSpecValue.getSpecId(), String.valueOf(spuSpecValue.getSpecValueId()))))
.collect(Collectors.toList());
spuSpecValueVo.setSpecValues(specValues);
});
```
在优化后的代码中,我们使用`Collectors.groupingBy`将`spuSpecList`按照规格id分组,得到一个以规格id为key,规格值列表为value的Map。这样就避免了多次遍历寻找匹配的规格值。
然后,我们使用`forEach`遍历`spuSpecList`,对每个规格进行处理。通过`spuSpecValueMap`获取对应的规格值列表,然后过滤掉不符合条件的规格值,最后将处理后的规格值列表设置回`spuSpecValueVo`。
这样,我们避免了重复遍历和创建临时列表,提高了代码的效率。
优化这段代码 vMap.put("tags", v.getTags().stream().map(TagDTO::mapping).collect(Collectors.toList())); v.getTags().forEach(t -> { if (t.getId() == 2 || t.getId() == 208) { vMap.put("earTag", t.getName()); } else if (t.getId() == 5) { vMap.put("iflytekTag", t.getName()); } }); if (valueByVersionMap.containsKey(v.getId())) { final Map<Integer, ValueEntity> valueMap = valueByVersionMap.get(v.getId()).stream() .collect(Collectors.toMap(ValueEntity::getPropertyId, value -> value)); valueMap.keySet().forEach(p -> { if (this.propertyMap.containsKey(p)) { final String value = this.getValue(valueMap.get(p).getVal(), this.propertyMap.get(p).getCategory()); if (StringUtils.isNotBlank(value)) { vMap.put(String.valueOf(p), value); } } if (p.equals(11)) { final String value = this.getValue(valueMap.get(p).getVal(), this.propertyMap.get(p).getCategory()); if (StringUtils.isNotBlank(value)) { vMap.put("license", value); } } }); }
这是给定的代码段:
```java
vMap.put("tags",
v.getTags().stream().map(TagDTO::mapping).collect(Collectors.toList()));
v.getTags().forEach(t -> {
if (t.getId() == 2 || t.getId() == 208) {
vMap.put("earTag", t.getName());
} else if (t.getId() == 5) {
vMap.put("iflytekTag", t.getName());
}
});
if (valueByVersionMap.containsKey(v.getId())) {
final Map<Integer, ValueEntity> valueMap = valueByVersionMap.get(v.getId()).stream()
.collect(Collectors.toMap(ValueEntity::getPropertyId, value -> value));
valueMap.keySet().forEach(p -> {
if (this.propertyMap.containsKey(p)) {
final String value = this.getValue(valueMap.get(p).getVal(),
this.propertyMap.get(p).getCategory());
if (StringUtils.isNotBlank(value)) {
vMap.put(String.valueOf(p), value);
}
}
if (p.equals(11)) {
final String value = this.getValue(valueMap.get(p).getVal(),
this.propertyMap.get(p).getCategory());
if (StringUtils.isNotBlank(value)) {
vMap.put("license", value);
}
}
});
}
```
为了优化这段代码,我们可以进行以下几个步骤:
1. 使用方法引用来简化 `v.getTags().stream().map(TagDTO::mapping)` 为 `v.getTags().stream().map(TagDTO::mapping)`。
2. 使用 `forEach` 循环替代多个 `if` 语句来处理 `tags`。
3. 将 `valueByVersionMap` 的值缓存到一个变量中,以提高性能。
4. 将 `valueMap.keySet().forEach` 替换为 `valueMap.forEach`,以简化代码。
以下是优化后的代码:
```java
vMap.put("tags",
v.getTags().stream().map(TagDTO::mapping).collect(Collectors.toList()));
v.getTags().forEach(t -> {
int id = t.getId();
String name = t.getName();
if (id == 2 || id == 208) {
vMap.put("earTag", name);
} else if (id == 5) {
vMap.put("iflytekTag", name);
}
});
if (valueByVersionMap.containsKey(v.getId())) {
Map<Integer, ValueEntity> valueMap = valueByVersionMap.get(v.getId()).stream()
.collect(Collectors.toMap(ValueEntity::getPropertyId, value -> value));
valueMap.forEach((p, value) -> {
if (propertyMap.containsKey(p)) {
String propertyCategory = propertyMap.get(p).getCategory();
String propertyValue = getValue(value.getVal(), propertyCategory);
if (StringUtils.isNotBlank(propertyValue)) {
vMap.put(String.valueOf(p), propertyValue);
}
}
if (p.equals(11)) {
String licenseValue = getValue(value.getVal(), propertyMap.get(p).getCategory());
if (StringUtils.isNotBlank(licenseValue)) {
vMap.put("license", licenseValue);
}
}
});
}
```
这样,代码就更简洁、可读性更高,并且在一些地方进行了性能优化。请注意,这只是一个基本的优化示例,具体的优化策略可能会因上下文而异。