gpt4 book ai didi

java - 使用 java 8 流基于另一个 List 填充 List

转载 作者:行者123 更新时间:2023-12-01 00:19:35 24 4
gpt4 key购买 nike

我有 2 List
List<Obligation>List<ObligationStatus>结构如下:

public class Obligation {
private String topic;
private String status;
private String comment;
private String text;
}

public class ObligationStatus {

private String topic;
private String status;
private String comment;
}

status comment 里面List<Obligation> null 对于所有元素,
topiclist 中均有填充
我想设置 statuscomment来自 List<ObligationStatus> 的每个元素进入 List<Obligation> 的每个元素基于 topic .

        // this is what i have tried, and is working fine
obList.stream().forEach(ob -> {
osList.stream().forEach(os -> {
if (ob.getTopic().equalsIgnoreCase(os.getTopic())) {
ob.setStatus(os.getStatus());
ob.setComment(os.getComment());
}
});
});
// also tried to do this without using forEach, but compilation error here
List<Obligation> result = obList.stream()
.map(ob -> osList.stream().map(os -> os.getTopic().equals(ob.getTopic())).collect(Function.identity()))
.collect(Collectors.toList());

我们可以在不起诉的情况下做到这一点吗 forEach
任何信息都会有所帮助。

最佳答案

为什么要为此使用流? Stream 不是改变对象的正确工具。

使用标准的for 循环。也使代码更易于理解。

List<Obligation> obligationList = ...;
List<ObligationStatus> statusList = ...;

// For better performance, make a map
Map<String, ObligationStatus> statusMap = new HashMap<>(statusList.size());
for (ObligationStatus status : statusList)
statusMap.put(status.getTopic(), status);

// Assign status values
for (Obligation obligation : obligationList) {
ObligationStatus status = statusMap.get(obligation.getTopic());
if (status != null) {
ob.setStatus(status.getStatus());
ob.setComment(status.getComment());
}
}

如果你想做一些流逻辑,第一部分是一个很好的选择:

// For better performance, make a map
Map<String, ObligationStatus> statusMap = statusList.stream()
.collect(Collectors.toMap(ObligationStatus::getTopic, Function.identity()));

更新

注意到问题代码在比较 topic 值时执行了 equalsIgnoreCase(...)。如果确实需要,请将 HashMap 更改为不区分大小写的 TreeMap:

Map<String, ObligationStatus> statusMap = new TreeMap<>(String.CASE_INSENSITIVE_ORDER);

流版本比较复杂,所以最好保持老式。

关于java - 使用 java 8 流基于另一个 List<Object2> 填充 List<Object1>,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57157340/

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