for (SysMemberIndustry sysMemberIndustry : childList) { for (String s : collect) { if (sysMemberIndustry.getOriginalNo().equals(s)){ existList.add(sysMemberIndustry); } } }转stream
时间: 2024-03-10 18:44:20 浏览: 60
可以把这段代码转换为Stream API的形式,如下所示:
```java
existList = childList.stream()
.filter(sysMemberIndustry -> collect.contains(sysMemberIndustry.getOriginalNo()))
.collect(Collectors.toList());
```
这里使用了Stream API的filter方法,对childList进行过滤,保留其中满足条件的元素,即sysMemberIndustry.getOriginalNo()在collect集合中出现的元素,然后使用collect方法将过滤后的元素收集到一个新的List中。
相关问题
优化以下java代码 public static Map<String, Object> transferRuStyle(Map<String, Object> inputRenderData, Locale locale) { //俄语修改字体为华文仿宋 if ("RU".equals(locale.getCountry())) { for (Map.Entry<String, Object> item : inputRenderData.entrySet()) { if (item.getValue() instanceof String) { inputRenderData.put(item.getKey(), new TextRenderData(inputRenderData.get(item.getKey()).toString(), RU_STYLE)); } if (item.getValue() instanceof Map) { Map<String, Object> childMap = (Map<String, Object>) item.getValue(); transferRuStyle(childMap, locale); } if (item.getValue() instanceof List) { transferRuList((List) item.getValue(),locale); } } } return inputRenderData; } public static void transferRuList(List<Object> childList,Locale locale){ for (int i = 0; i < childList.size(); i++) { if (childList.get(i) instanceof String) { childList.set(i, new TextRenderData(childList.get(i).toString(), RU_STYLE)); } if (childList.get(i) instanceof Map) { Map<String, Object> childMap = (Map<String, Object>) childList.get(i); transferRuStyle(childMap, locale); } } }
以下是对给定的 Java 代码进行优化的建议:
1. 避免重复获取 item.getValue():
在原始代码中,多次调用 `inputRenderData.get(item.getKey())` 来获取值,可以在循环开始前将其存储在一个变量中,以提高效率。
2. 使用泛型来增加代码的类型安全性:
在原始代码中,使用了原始类型 `List` 和 `Map`,可以将其改为使用泛型 `List<Object>` 和 `Map<String, Object>`,以增加代码的可读性和类型安全性。
3. 使用增强的 for 循环:
原始代码中使用了传统的 for 循环来遍历列表,可以改为使用增强的 for 循环,使代码更简洁。
优化后的代码如下所示:
```java
public static Map<String, Object> transferRuStyle(Map<String, Object> inputRenderData, Locale locale) {
if ("RU".equals(locale.getCountry())) {
for (Map.Entry<String, Object> item : inputRenderData.entrySet()) {
Object value = item.getValue();
if (value instanceof String) {
inputRenderData.put(item.getKey(), new TextRenderData(value.toString(), RU_STYLE));
}
if (value instanceof Map) {
Map<String, Object> childMap = (Map<String, Object>) value;
transferRuStyle(childMap, locale);
}
if (value instanceof List) {
transferRuList((List<Object>) value, locale);
}
}
}
return inputRenderData;
}
public static void transferRuList(List<Object> childList, Locale locale) {
for (Object obj : childList) {
if (obj instanceof String) {
int index = childList.indexOf(obj);
childList.set(index, new TextRenderData(obj.toString(), RU_STYLE));
}
if (obj instanceof Map) {
Map<String, Object> childMap = (Map<String, Object>) obj;
transferRuStyle(childMap, locale);
}
}
}
```
通过这些优化,代码将更加清晰、高效,并且具有更好的可读性和可维护性。
public List<SmokeArea> buildSmokeAreaTree(List<SmokeArea> smokeAreas){ List<SmokeArea> returnList = new ArrayList<>(); List<Long> tempList = smokeAreas.stream().map(SmokeArea::getAreaId).collect(Collectors.toList()); for(SmokeArea smokeArea : smokeAreas){ //如果顶级节点,遍历发该父节点的所有子节点 if (!tempList.contains(smokeArea.getParentId())){ recursionFn(smokeAreas,smokeArea); returnList.add(smokeArea); } } if (returnList.isEmpty()){ returnList = smokeAreas; } return returnList; } public List<TreeSelect> buildSmokeAreaTreeSelect(List<SmokeArea> smokeAreas){ List<SmokeArea> smokeAreaTrees = buildSmokeAreaTree(smokeAreas); return smokeAreaTrees.stream().map(TreeSelect::new).collect(Collectors.toList()); } private void recursionFn(List<SmokeArea> list, SmokeArea smokeArea){ //得到子节点列表 List<SmokeArea> childList = getChildList(list,smokeArea); smokeArea.setChildren(childList); for (SmokeArea sChild : childList) { if (hasChild(list,sChild)){ recursionFn(list,sChild); } } } private List<SmokeArea> getChildList(List<SmokeArea> list ,SmokeArea smokeArea){ List<SmokeArea> slist = new ArrayList<>(); Iterator<SmokeArea> it = list.iterator(); while (it.hasNext()){ SmokeArea s = (SmokeArea) it.next(); if (StringUtils.isNotNull(s.getParentId()) && s.getParentId().longValue() == smokeArea.getAreaId().longValue()){ slist.add(s); } } return slist; } private boolean hasChild(List<SmokeArea> list, SmokeArea smokeArea){return getChildList(list,smokeArea).size() > 0;} 帮我解释一下这段代码
这段代码实现了将一组SmokeArea对象构建成树形结构的功能。其中SmokeArea是一个烟区对象,具有一个编号areaId和一个父节点编号parentId。该方法的输入参数是一个SmokeArea对象列表,输出结果是一个树形结构的SmokeArea对象列表。具体实现过程如下:
1. 先创建一个空的返回结果列表 returnList,并创建一个 tempList,用于暂存所有SmokeArea对象的编号 areaId。
2. 遍历传入的 SmokeArea 列表 smokeAreas,对于每个SmokeArea对象,如果它的父节点编号 parentId 不在 tempList 中,则说明它是一个顶级节点,需要从它开始递归遍历其所有子节点。递归遍历的过程中,将每个遍历到的 SmokeArea 对象放入 returnList 中。
3. 如果 returnList 仍然是空的,则说明所有SmokeArea对象都是顶级节点,直接将 smokeAreas 赋值给 returnList。
4. 最后,将 returnList 中的 SmokeArea 对象转化为 TreeSelect 对象并返回。其中 TreeSelect 是一个树形结构的下拉列表对象,用于在前端页面中显示。
5. 递归遍历的具体实现是一个私有方法 recursionFn,它接收两个参数,一个是 SmokeArea 对象列表 list,另一个是当前正在递归遍历的 SmokeArea 对象 smokeArea。它的作用是找到 smokeArea 的所有子节点,并将它们放入 smokeArea 的 children 属性中。
6. 找到 smokeArea 的所有子节点的方法是 getChildList,它接收两个参数,一个是 SmokeArea 对象列表 list,另一个是当前正在递归遍历的 SmokeArea 对象 smokeArea。它的作用是从 list 中找到所有 parentId 等于 smokeArea 的 areaId 的 SmokeArea 对象,将它们放入一个列表中并返回。
7. 判断一个 SmokeArea 对象是否有子节点的方法是 hasChild,它接收两个参数,一个是 SmokeArea 对象列表 list,另一个是当前正在递归遍历的 SmokeArea 对象 smokeArea。它的作用是判断 getChildList(list, smokeArea) 的返回值列表的长度是否大于0,如果大于0,则说明 smokeArea 有子节点,否则没有子节点。
阅读全文