如何在多层中按值对Map进行排序

时间:2017-07-04 10:23:11

标签: java sorting

以下是具有以下结构的地图:

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())));

2 个答案:

答案 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);
            });