当前位置: 首页 > 知识库问答 >
问题:

如何排序列表基于内部对象的属性在java 8

西门伟
2023-03-14

我的课程结构类似于:

    class FinalResponse {
        Source source;
        List<Target> targets;
    }
    
    class Response {
    Source source;
    Target target;
   }

    class Source {
        Long sourceId;
        String sourceName;
    }
    
    class Target {
        Long targetId;
        String targetName;
    }

我有两个不同的表SourceTarget,在加入它们之后,我在查询输出中得到了四个列。我正在构建响应对象使用这四个列的值。我有响应对象中的数据与这4个属性源名称,源名称,目标名称,目标名称。我可以在多行上有相同的Source ceId,Source ceName,但是Target etId,Target etName总是不同的。

我将所有target对象分组到了source相同的列表中。

List<FinalResponse> finalResponses = responses.stream()
    .collect(Collectors.groupingBy(
        Response::getSource,
        LinkedHashmap::new,
        Collectors.mapping(Response::getTarget, Collectors.toList())
    )) // Map<Source, List<Target>> is built
    .entrySet()
    .stream() // Stream<Map.Entry<Source, List<Target>>>
    .map(e -> new FinalResponse(e.getKey(), e.getValue()))
    .collect(Collectors.toList());

但是有时候数据库的回复不能排序,即使它被排序了,我已经使用了LinkedHashmap::新的,然后也是我的最终输出List

finalResponses.sort(Comparator.comparing(finalResponse->finalResponse.getSource().getSourceId()));

它对非null值工作正常,但是如果我在多行上有Source(源ID=null,源名称=null),那么我就会得到NullPointerExc0019。什么是基于对象的Source属性的排序集合的最佳方法?


共有1个答案

龚志
2023-03-14

比较器。nullsLast比较器。nullsFirst应用于处理比较项目中可能的null值:

finalResponses.sort(Comparator.nullsLast(
    Comparator.comparing(fr -> fr.getSource().getSourceId())
));

或者像这样:

finalResponses.sort(Comparator.comparing(
    fr -> fr.getSource().getSourceId(),
    Comparator.nullsLast(Comparator.naturalOrder())
));
 类似资料:
  • 我有以下Java POJO 如何实现在游戏对象列表中确定重复字段的功能? 例如,当两个游戏有相同的开始日期? 我以前使用过,但仅在根据最早日期等对对象进行排序时使用过,但它能否用于对重复项进行排序?

  • 问题内容: 比方说你有一个的对象。 如果它们都具有int GoalScored变量,则如何排序?你如何按GoalScored排序? 问题答案: 你可以使用Collections.sort自定义Comparator 。 比较部分也可以这样写: 或者,你可以制作。这定义了所有对象的自然顺序。使用a 更灵活,因为不同的实现可以按名称,年龄等进行排序。

  • 例如,我有以下数据集: 我需要根据数组中的条件对数组进行排序。我最终得出了这样的解决方案: 但我无法理解如何使用数组而不是硬编码的和属性。数组可以有许多属性。

  • 我有一个对象列表,我需要按其中一个对象属性对其进行排序。 我可以用下面的代码按升序排序 但是,这是按升序排序列表,而我需要做的是按降序排序。在对对象列表进行排序时,这可能吗?

  • 我是Java流的新手,我只想对我的对象的键进行排序。 所以,我尝试了这样的方法,效果很好 这是根据我想要的分类。 但我得到的结果在

  • 问题内容: 和骗局。如何按升序排序,然后按?有人可以帮忙吗?我知道在中具有通用算法和重载运算符,但是我是Java新手。 问题答案: 使实现或在单独的类中实现。然后致电: 要么 通常,如果有一个单一的“自然”排序顺序,则实施是个好主意…否则(如果你碰巧想要按特定顺序进行排序,但可能同样容易地希望使用另一个顺序),则最好实现。老实说,这种特殊情况可能会发生任何一种……但是我可能会坚持使用更灵活的选择。