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

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

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

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

犯罪嫌疑人X 2023-04-13 14:52:36
我有2個(gè)ListList<Obligation>,List<ObligationStatus> 結(jié)構(gòu)如下: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里面是所有元素, 填充在 我想設(shè)置的comment和從每個(gè)元素到每個(gè)元素的基礎(chǔ)上。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?任何信息都會(huì)有幫助。
查看完整描述

2 回答

?
30秒到達(dá)戰(zhàn)場(chǎng)

TA貢獻(xiàn)1828條經(jīng)驗(yàn) 獲得超6個(gè)贊

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


使用標(biāo)準(zhǔn)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());

    }

}

如果你想做一些流邏輯,第一部分是一個(gè)很好的選擇:


// For better performance, make a map

Map<String, ObligationStatus> statusMap = statusList.stream()

        .collect(Collectors.toMap(ObligationStatus::getTopic, Function.identity()));

更新


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


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

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


查看完整回答
反對(duì) 回復(fù) 2023-04-13
?
萬(wàn)千封印

TA貢獻(xiàn)1891條經(jīng)驗(yàn) 獲得超3個(gè)贊

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


但是,您可以使用單個(gè)forEach. 可以使用和來定位ObligationStatus與實(shí)例匹配的實(shí)例。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());

          });

});


查看完整回答
反對(duì) 回復(fù) 2023-04-13
  • 2 回答
  • 0 關(guān)注
  • 190 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)