繁体   English   中英

根据 Java 中的一个值重新排列列表

[英]Rearrange the List based on one its value in Java

创作一个 Java 方法,该方法将 List 作为参数(MasterList)并返回另一个列表(ExpectedList)。

MasterList: 
{ 
    (ID :abc123, Count: 20),
    (ID :abc122, Count: 19),
    (ID :abc122, Count: 20),
    (ID :abc122, Count: 18),
    (ID :abc121, Count: 21),
    (ID :abc120, Count: 21),
    (ID :abc120, Count: 20)
}

List 中的每个 object 都有两个变量:

  1. 标识(字符串)
  2. 计数(数字)

我试图实现的逻辑是:当 MasterList 有多个MasterList且 ID 相同时,只考虑特定的 object,其计数更大。 表示 ID: abc122有 3 个对象,所以我只考虑(ID:abc122,计数:20),因为 ID:abc122 的对象中计数较高。 最后该方法应该返回

ExpectedList:
    {
        (ID :abc123, Count: 20),
        (ID :abc122, Count: 20),
        (ID :abc121, Count: 21),
        (ID :abc120, Count: 21)
    }

Stream 在您的列表上,并按ID收集您的对象分组并映射到 object 并使用Collectors.maxBy获取最大计数以获取Map<String,Optional<MyObject>> Stream 在值上展开可选并收集到列表:

List<MyObject> result = 

list.stream()
    .collect(
            Collectors.groupingBy(
                    MyObject::getId, Collectors.maxBy(Comparator.comparing(MyObject::getCount))))
    .values()
    .stream()
    .map(Optional::get)
    .collect(Collectors.toList());

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM