按特定对象字段过滤自定义对象列表

问题描述 投票:0回答:1

我有一个对象 Batch(字符串 id、即时日期、长版本)

我有一个批次列表,我想过滤为每个 id 保留一批,其中版本最高,即:

batch1 = Batch(1, date, 5)
batch2 = Batch(2, date, 4)
batch3 = Batch(2, date, 7)
batch4 = Batch(1, date, 2)
batch5 = Batch(1, date, 4)
batch6 = Batch(3, date, 2)

after filtering I need to have 
List.of(batch1, batch3, batch6)```
java java-8 java-12
1个回答
0
投票

您可以将流与 toMap 一起使用,如下所示:

Collection<Batch> highestVersionBatches = batches.stream()
        .collect(Collectors.toMap(
                Batch::getId,
                batch -> batch,
                (e, r) -> e.getVersion() >= r.getVersion() ? e : r // <-- magic goes here
        )).values();
© www.soinside.com 2019 - 2024. All rights reserved.