gpt4 book ai didi

如果第二个列表的一项满足条件并返回新列表,则 Java 8 foreach 添加到新列表

转载 作者:行者123 更新时间:2023-12-01 13:20:27 26 4
gpt4 key购买 nike

我想知道是否有可能使这个方法更好,所以我有这个方法:

public int getLabelIdByLabelName(String labelName) throws ApiException {
List<LabelInfo> labelsList = getAllLabels();
return labelsList.stream()
.filter(label -> label.getName().equals(labelName))
.findFirst()
.map(LabelInfo::getId)
.orElse(0);
}

这是使用它的方法:
public void enableSpecificDevices(RuleIdentifier identifier, String[] labelNames) throws ApiException {
List<Integer> labelsIdList = getLabelListById(identifier);

for (String labelName : labelNames) {
labelsIdList.remove(Integer.valueOf(deviceAPI.getLabelIdByLabelName(labelName)));
}

DisableRequest disableRequest = getDisableRequestBody(deviceIdList, labelsIdList);
sendDisableEnableRequest(disableRequest, identifier);
}

此方法返回 int值: deviceAPI.getLabelIdByLabelName(labelName) .

正如你在 for 循环中看到的,我正在调用 getLabelIdByLabelName每次然后执行我需要的逻辑,它的资源无缘无故地消耗我想知道如何从这个列表中返回整数列表,这将是这样的:
获取 List 一次遍历将等于名称的名称数组并将其添加到新的整数列表并返回它。

最佳答案

如果您收集 labelName 可以简化它和它的 idMap然后使用该 Map在您的服务方法中,例如:

public Map<String, Integer> labelIdByNameMap() throws ApiException {
List<LabelInfo> labelsList = getAllLabels();
Map<String, Integer> labelNameToIdMap = labelsList.stream()
.collect(Collectors.toMap(LabelInfo::getName, LabelInfo::getId));
return labelNameToIdMap;
}

进一步将其用作:
public void enableSpecificDevices(RuleIdentifier identifier, String[] labelNames) throws ApiException {
Set<String> labelNameSet = Arrays.stream(labelNames).collect(Collectors.toSet());
List<Integer> filteredValuesToRemove = labelIdByNameMap().entrySet().stream()
.filter(e -> labelNameSet.contains(e.getKey()))
.map(Map.Entry::getValue)
.collect(Collectors.toList());

List<Integer> labelsIdList = getLabelListById(identifier);
labelsIdList.removeAll(filteredValuesToRemove);

DisableRequest disableRequest = getDisableRequestBody(deviceIdList, labelsIdList);
sendDisableEnableRequest(disableRequest, identifier);
}

旁注,在现实生活中,查询所有标签有时最终可能会很昂贵,其中应该在处理内存中的所有项目与执行批量读取与基于 name 的单个数据库查找之间进行权衡评估。获取 id预计。

关于如果第二个列表的一项满足条件并返回新列表,则 Java 8 foreach 添加到新列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60705897/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com