第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 java 8 流基于另一個 List<Object2> 填充 List<Object1>

使用 java 8 流基于另一個 List<Object2> 填充 List<Object1>

犯罪嫌疑人X 2023-04-13 14:52:36
我有2個ListList<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>nulltopicliststatuscommentList<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?任何信息都會有幫助。
查看完整描述

2 回答

?
30秒到達戰(zhàn)場

TA貢獻1828條經驗 獲得超6個贊

為什么要為此使用流?Stream 不是改變對象的正確工具。


使用標準for循環(huán)。也使代碼更易于理解。


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()));

更新


注意到問題代碼equalsIgnoreCase(...)在比較topic值時做了。如果確實需要,請將 更改HashMap為不區(qū)分大小寫TreeMap:


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

流版本變得復雜,所以最好保持舊式。


查看完整回答
反對 回復 2023-04-13
?
萬千封印

TA貢獻1891條經驗 獲得超3個贊

由于您正在修改現(xiàn)有的List,因此無需使用collect.


但是,您可以使用單個forEach. 可以使用和來定位ObligationStatus與實例匹配的實例。ObligationfilterfindFirst


obList.stream().forEach(ob -> {

    osList.stream()

          .filter(os -> ob.getTopic().equalsIgnoreCase(os.getTopic()))

          .findFirst()

          .ifPresent (os -> {

              ob.setStatus(os.getStatus());

              ob.setComment(os.getComment());

          });

});


查看完整回答
反對 回復 2023-04-13
  • 2 回答
  • 0 關注
  • 170 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號