以下是具有以下结构的地图:
Map<String, Oddcurve> curves;
class Oddcurve entends Curve {
private String curvename;
}
class Curve {
private int curveId;
protected Set<CurvePoint> points = new TreeSet();
}
class CurvePoint {
private double time;
private double value;
}
我希望按时间ASC对曲线进行排序,最后返回相同的地图:
proxyCurves.entrySet().stream().sorted(Comparator.comparing(Map.Entry::getValue));
我这样写,当我调试它时,我可以看到排序工作正常,但最后仍然返回原始曲线,我不知道为什么?
proxyCurves.values().stream().forEach(curve -> curve.setPoints(curve.getPoints().stream().sorted(new ComparableComparator<>()).collect(Collectors.toSet())));
答案 0 :(得分:1)
hashCode()
和equals()
方法(因此可能会遇到问题)。Comparable
CurvePoint
类中的接口,因为您使用的是TreeSet
。然后你就可以覆盖了
compareTo()
方法,并定义您的排序方式。答案 1 :(得分:0)
这是我用来解决问题的代码:
curves.values().stream().forEach(
curve -> {
final Set<CurvePoint> sortedPoints = new TreeSet<>(
(curvePoint1, curvePoint2) -> Double.compare(curvePoint1.getTime(), curvePoint2.getTime()));
sortedPoints.addAll(curve.getPoints());
curve.setPoints(sortedPoints);
});