我的课程结构类似于:
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;
}
我有两个不同的表Source
和Target
,在加入它们之后,我在查询输出中得到了四个列。我正在构建响应
对象使用这四个列的值。我有响应对象中的数据与这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
属性的排序集合的最佳方法?
比较器。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新手。 问题答案: 使实现或在单独的类中实现。然后致电: 要么 通常,如果有一个单一的“自然”排序顺序,则实施是个好主意…否则(如果你碰巧想要按特定顺序进行排序,但可能同样容易地希望使用另一个顺序),则最好实现。老实说,这种特殊情况可能会发生任何一种……但是我可能会坚持使用更灵活的选择。