按包含对象中的字段对对象列表进行排序
Sort the list of objects by the field in included object
我想根据 ElementWithDistance class 中的距离对 potentialHS 对象列表进行排序,但我无法以这种方式获取 distnace 字段。调用 getElementWithDistance 后,我无法调用 getDistance。如何按包含的字段对列表进行排序 class?
List<PotentialHS> potentialHS = potentialHS.stream().sorted(Comparator.comparingDouble(PotentialHS :: getElementWithDistance)).collect(Collectors.toList());
@NoArgsConstructor
@AllArgsConstructor
@Getter
@Setter
@Builder
@ToString
public class PotentialHS {
private Integer density;
private Double startDistance;
private Double lastDistance;
private List<PMValue> pmv;
private ElementWithDistance elementWithDistance;
}
@NoArgsConstructor
@AllArgsConstructor
@Getter
@Setter
@Builder
@ToString
public class ElementWithDistance {
private Long elementId;
private Double distance;
private Type type;
}
PotentialHS :: getElementWithDistance
是 shorthand 用于:
(PotentialHS x) -> x.getElementWithDistance()
换句话说,它说:要对这个流进行排序,应用以下操作:
- 流中的每个项目,通过调用
getElementWithDistance()
获取您获得的东西。将其视为双精度数,然后按这些双精度数排序。
这显然行不通 - ElementWithDistance
不是双数。
你想要:
(PotentialHS x) -> x.getElementWithDistance().getDistance();
还要注意它是 Double
,而不是 double
,所以这是一个错误(修复它。Double
是围绕 [=17= 的非原始包装类型],你真的不想要它。它有额外的价值(null
),而且效率极低。这也意味着你不能做像 'give me the largest double in this stream'.
这样的事情
这让你:
List<PotentialHS> potentialHS = potentialHS.stream().sorted(Comparator.comparingDouble(x -> x.getElementWithDistance().getDistance())).collect(Collectors.toList());
我想根据 ElementWithDistance class 中的距离对 potentialHS 对象列表进行排序,但我无法以这种方式获取 distnace 字段。调用 getElementWithDistance 后,我无法调用 getDistance。如何按包含的字段对列表进行排序 class?
List<PotentialHS> potentialHS = potentialHS.stream().sorted(Comparator.comparingDouble(PotentialHS :: getElementWithDistance)).collect(Collectors.toList());
@NoArgsConstructor
@AllArgsConstructor
@Getter
@Setter
@Builder
@ToString
public class PotentialHS {
private Integer density;
private Double startDistance;
private Double lastDistance;
private List<PMValue> pmv;
private ElementWithDistance elementWithDistance;
}
@NoArgsConstructor
@AllArgsConstructor
@Getter
@Setter
@Builder
@ToString
public class ElementWithDistance {
private Long elementId;
private Double distance;
private Type type;
}
PotentialHS :: getElementWithDistance
是 shorthand 用于:
(PotentialHS x) -> x.getElementWithDistance()
换句话说,它说:要对这个流进行排序,应用以下操作:
- 流中的每个项目,通过调用
getElementWithDistance()
获取您获得的东西。将其视为双精度数,然后按这些双精度数排序。
这显然行不通 - ElementWithDistance
不是双数。
你想要:
(PotentialHS x) -> x.getElementWithDistance().getDistance();
还要注意它是 Double
,而不是 double
,所以这是一个错误(修复它。Double
是围绕 [=17= 的非原始包装类型],你真的不想要它。它有额外的价值(null
),而且效率极低。这也意味着你不能做像 'give me the largest double in this stream'.
这让你:
List<PotentialHS> potentialHS = potentialHS.stream().sorted(Comparator.comparingDouble(x -> x.getElementWithDistance().getDistance())).collect(Collectors.toList());