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

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

使用 java 8 steam 查找兩個(gè)列表之間的匹配行并映射到另一個(gè)對(duì)象

使用 java 8 steam 查找兩個(gè)列表之間的匹配行并映射到另一個(gè)對(duì)象

慕勒3428872 2021-11-17 10:35:36
我試圖在兩個(gè)不同的列表之間找到匹配的元素,然后我試圖映射到不同對(duì)象的列表,該列表包含來(lái)自列表和某些選定元素的元素。這是我的兩個(gè)豆子——public class LogsData {    LocalDate eventDate ;    String correlationId;    String authId;    int numberofSQL;    // getter and setter}public class DistributionData {    LocalDate eventDate;    String correlationId;    String callingProId;    long transactionCount ;    // getter and setter }public class ResultBean {    LocalDate eventDate;    String correlationId;    String callingProId;    long transactionCount ;    String authId ;    int numberOfSQL;}我如何獲得包含與 匹配的最終列表correlationId,eventDate在結(jié)果中,我想要ResultBean.有人可以幫忙嗎?
查看完整描述

3 回答

?
浮云間

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

我改變了一點(diǎn)點(diǎn)設(shè)計(jì)以使其工作,我將分發(fā)列表添加到 Logs Beans 中,因?yàn)樗哂幸粚?duì)多的關(guān)系,我能夠合并來(lái)自?xún)蓚€(gè)列表的數(shù)據(jù),但它運(yùn)行速度非常慢,因?yàn)榧洗笮》浅4?,尤其是分發(fā)列表,有人可以建議一些高性能或任何更好的設(shè)計(jì)。


 List<LogsData> logsData = logs.stream()

            .filter(e -> (distributionData.stream()

                    .filter(d -> 

           d.getCorrelationId.equals(e.getCorrelationId))

       .filter(d-> d.getEventDate().equals(e.getEventDate()))

       .map(mapper-> e.getDistribution().add(mapper); return e; })

                    .count())<1)

                    .collect(Collectors.toList()); 


查看完整回答
反對(duì) 回復(fù) 2021-11-17
?
智慧大石

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

根據(jù)Louis Wasserman 的評(píng)論,可能可以在 Streams 有優(yōu)勢(shì)的地方使用它??紤]擁有LogsData和DistributionData(和可選的ResultBean)擴(kuò)展基類(lèi)型:


class Data {


    LocalDate eventDate ;

    String correlationId;


    Data(LocalDate eventDate, String correlationId) {

        this.eventDate = eventDate;

        this.correlationId = correlationId;

    }


    LocalDate getEventDate() { return eventDate; }

    String getCorrelationId(){ return correlationId; }


    @Override

    public boolean equals(Object o) {

        if(!(o instanceof Data)) { return false; }

        Data d = (Data) o;

        return eventDate.equals(d.getEventDate())

                && correlationId.equals(d.getCorrelationId() );

    }

}

列出:


List<LogsData> logsData = new ArrayList<>();

List<DistributionData> dData = new ArrayList<>();

您可以簡(jiǎn)單地將兩個(gè)列表相交


logsData.retainAll(dData);

dData.retainAll(logsData);

讓它們以相同的順序排序:


//sort so two lists have the same order. If correlationId is not unique you may need 

//to enhance the comperator 

Collections.sort(dData, (a, b) -> a.getCorrelationId().compareToIgnoreCase(b.getCorrelationId()));

Collections.sort(logsData, (a, b) -> a.getCorrelationId().compareToIgnoreCase(b.getCorrelationId()));

并用于Stream構(gòu)造ResultBean對(duì)象列表:


List<ResultBean> resultList = IntStream.range(0, logsData.size())

    .mapToObj( i ->

            new ResultBean(dData.get(i).getEventDate(), dData.get(i).getCorrelationId(),

            dData.get(i).getCallingProId(), dData.get(i).getTransactionCount(),

            logsData.get(i).getAuthId(), logsData.get(i).getNumberofSQL())

            )

    .collect(Collectors.toList());


查看完整回答
反對(duì) 回復(fù) 2021-11-17
?
UYOU

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

一種方法是將logsData列表的元素累積到一個(gè)映射中,其中鍵logsData#getEventDate與logsData#getCorrelationId.


Map<String, LogsData> accumulator = 

        logsData.stream()

                .collect(toMap(l -> l.getEventDate() + l.getCorrelationId(), Function.identity()));

然后流過(guò)distributionData列表并獲取地圖中的相應(yīng)元素,然后將它們轉(zhuǎn)換為ResultBean.


List<ResultBean> resultSet = distributionData.stream()

       .map(d -> {

              LogsData logs = accumulator.get(d.getEventDate() + d.getCorrelationId());

              if (logs != null)

                   return new ResultBean(d.getEventDate(), d.getCorrelationId(),

                     d.getCallingProId(), d.getTransactionCount(), logs.getAuthId(), logs.getNumberofSQL());

                 return null;

       })

       .filter(Objects::nonNull)

       .collect(Collectors.toList());

這假設(shè)ResultBean有一個(gè)構(gòu)造函數(shù)接受所有必要的參數(shù),如果不是這樣,那么只需調(diào)用 setter 方法來(lái)設(shè)置必要的數(shù)據(jù)。


進(jìn)口:


import static java.util.stream.Collectors.*;

import java.util.stream.*;

import java.util.function.*;

另一種方法雖然效率較低:


List<ResultBean> resultSet = logsData.stream()

                .map(l -> distributionData.stream()

                        .filter(d -> l.getEventDate().equals(d.getEventDate()) &&

                                l.getCorrelationId().equals(d.getCorrelationId()))

                        .findFirst()

                        .map(d -> new ResultBean(d.getEventDate(), d.getCorrelationId(),

                                d.getCallingProId(), d.getTransactionCount(), l.getAuthId(), l.getNumberofSQL()))

                        .orElse(null))

                .filter(Objects::nonNull)

                .collect(Collectors.toList());

略有不同,在 JDK9 中避免了這種.orElse(null)).filter(Objects::nonNull)模式:


List<ResultBean> resultSet = logsData.stream()

                .flatMap(l -> distributionData.stream()

                        .filter(d -> l.getEventDate().equals(d.getEventDate()) &&

                                l.getCorrelationId().equals(d.getCorrelationId()))

                        .findFirst()

                        .map(d -> new ResultBean(d.getEventDate(), d.getCorrelationId(),

                                d.getCallingProId(), d.getTransactionCount(), l.getAuthId(), l.getNumberofSQL()))

                        .stream()

                )

                .collect(Collectors.toList());


查看完整回答
反對(duì) 回復(fù) 2021-11-17
  • 3 回答
  • 0 關(guān)注
  • 415 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號(hào)

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