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

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

.net list group by in java 8?

.net list group by in java 8?

C#
蕪湖不蕪 2022-08-20 17:07:45
我得到了一個將代碼從C#遷移到j(luò)ava 8的任務(wù)。我對下面的C#代碼有問題。List<Log> lst = LogRepository.GetLogs(DateTime.Now.AddDays(-2), DateTime.Now);return lst.GroupBy(x => new { x.Title, x.ID }).Select(x => x.OrderByDescending(y => y.DataChangeTime).FirstOrDefault()).ToList();是的,方法GroupBy很容易,我知道它在做什么。但是,我無法弄清楚這個系列方法在做什么,它會返回什么結(jié)果?最后,任何人都可以給我一個java版本解決方案嗎?
查看完整描述

1 回答

?
holdtom

TA貢獻(xiàn)1805條經(jīng)驗(yàn) 獲得超10個贊

C#代碼已經(jīng)由@Rango解釋過了。假設(shè) C 中的 -類采用以下設(shè)計#Log


class Log

{

    public String title;

    public String ID;

    public DateTime dataChangeTime;

    public String whatever;

    ...

}

和類似的Java類(例如 而不是 ),提供相同結(jié)果的 Java 表達(dá)式是:LocalDateTimeDateTime


Comparator<Log> comparator = (Log l1, Log l2) -> l2.dataChangeTime.compareTo(l1.dataChangeTime);    // sort descending

List<Log> resultantList = initialList.stream()

    .collect(Collectors.groupingBy(l -> l.title + l.ID)).values().stream()                          // group according to title and id

    .map(logs -> logs.stream().sorted(comparator).findFirst().get())                                // sort and take the first

    .collect(Collectors.toList());                                                                  // create the list

表達(dá)式將所有具有相同標(biāo)題和 ID 的對象組合在一起,即 相同的值 。如果分組條件更復(fù)雜,那么定義一個表示分組的類可能更有意義,例如Logl.title + l.ID


class LogGroup {


    private String Title;

    private String ID;


    public LogGroup(String Title, String ID) {

        this.Title = Title;

        this.ID = ID;

    }


    @Override

    public boolean equals(Object o) {


        if (o == this) return true;

        if (!(o instanceof LogGroup)) {

            return false;

        }

        LogGroup logGroup = (LogGroup) o;

        return Objects.equals(Title, logGroup.Title) &&

               Objects.equals(ID, logGroup.ID);

    }


    @Override

    public int hashCode() {

        return Objects.hash(Title, ID);

    }

}

至關(guān)重要的是,類同時實(shí)現(xiàn) - 和 -方法(即僅實(shí)現(xiàn) -方法是不夠的)。equalshashCodeequals


使用該類,Java 表達(dá)式將變?yōu)椋?/p>


Comparator<Log> comparator = (Log l1, Log l2) -> l2.dataChangeTime.compareTo(l1.dataChangeTime);

List<Log> resultantList = initialList.stream()

    .collect(Collectors.groupingBy(l -> new LogGroup(l.title, l.ID))).values().stream()

    .map(logs -> logs.stream().sorted(comparator).findFirst().get())

    .collect(Collectors.toList());

像這樣的列表


private static List<Log> getInitialList() {

    List<Log> initialList = new ArrayList<>();

    initialList.add(new Log("Title 6", "ID 6", LocalDateTime.of(2017,  1, 18, 23, 15, 12), "A"));

    initialList.add(new Log("Title 3", "ID 3", LocalDateTime.of(2005,  4, 20, 16, 10, 10), "B"));

    initialList.add(new Log("Title 1", "ID 1", LocalDateTime.of(2010, 10, 25,  3,  5,  2), "C"));

    initialList.add(new Log("Title 2", "ID 2", LocalDateTime.of(2018,  2, 18, 21, 13, 32), "D"));

    initialList.add(new Log("Title 3", "ID 3", LocalDateTime.of(2016,  5, 16, 15, 23, 15), "E"));

    initialList.add(new Log("Title 1", "ID 1", LocalDateTime.of(2012,  2,  8, 14, 46, 28), "F"));

    initialList.add(new Log("Title 6", "ID 6", LocalDateTime.of(1996,  1, 28, 22, 26, 34), "G"));

    initialList.add(new Log("Title 3", "ID 3", LocalDateTime.of(2007,  4, 15,  2,  5, 55), "H"));

    initialList.add(new Log("Title 6", "ID 3", LocalDateTime.of(2018,  1, 15, 20, 15, 10), "I"));

   return initialList;

}

由兩個表達(dá)式處理,如下所示


Title 1    ID 1    2012-02-08 14:46:28    F

Title 3    ID 3    2016-05-16 15:23:15    E

Title 2    ID 2    2018-02-18 21:13:32    D

Title 6    ID 6    2017-01-18 23:15:12    A

Title 6    ID 3    2018-01-15 20:15:10    I

生成的列表本身沒有排序(這很容易實(shí)現(xiàn)),但這也適用于 C#輸出。Collections.sort(...)


查看完整回答
反對 回復(fù) 2022-08-20
  • 1 回答
  • 0 關(guān)注
  • 138 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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