微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

从2个共享JAVA中相同属性的地图中获取对象的有序列表

如何解决从2个共享JAVA中相同属性的地图中获取对象的有序列表

我有一张地图,该地图具有我期望的顺序(排名)

sortedMap {deviceid:rank}:

{0:"id0"},{1,"id1"},{2:"id2"},{3:"id3"},

还有另一幅需要排序的地图

{"id3":object3},{"id1":object1},{"id0":object0},{"id2":object2}

我希望有类似的列表

{object0},{object1},{object2},{object3}

我尝试使用下面的代码,但是列表在我的代码添加了一部分似乎是错误的,而且我不知道有什么更好的解决方案:

    private List<MyObject> getSortedResultList(Map<String,Integer> sortedMap,Map<String,Object> toSortMap) {
    List<MyObject> sortedResultList = null;
    for (Integer rank : sortedMap.keySet()) {
        for (int i = 0; i < sortedMap.size(); i++) {
            sortedResultList.add(i,(MyObject) toSortMap.get(sortedMap.get(rank)));
        }
    }
    return sortedResultList;
}

由于我缺乏数据结构知识,试图在网上搜索了几个小时,没有任何线索可以解决,因此决定从这里寻求帮助。谢谢您提出任何建议。

解决方法

这是一种实现方法:

events: {
  load: function() {
    var point = this.series[0].points[0],xAxis = this.xAxis[0],x1 = xAxis.toValue(point.shapeArgs.x + this.plotTop),x2 = xAxis.toValue(
        point.shapeArgs.x + point.shapeArgs.width + this.plotTop
      );

    xAxis.update({
      tickPositions: [x1,x2]
    });
  }
}

首先对条目进行排序,然后获得相应的对象,然后过滤掉空值,最后将所有内容收集在列表中。

,

如果sortedMap按键排序(例如,它是TreeMap),则足以建立按sortedMap的值排序的列表:

private static List<MyObject> getSortedResultList(TreeMap<Integer,String> sortedMap,Map<String,MyObject> toSortMap) {

    return sortedMap.values().stream()
                    .map(key -> toSortMap.get(key))
                    .collect(Collectors.toList());
}

如果sortedMap需要另外排序:

private static List<MyObject> getSortedResultList2(Map<Integer,MyObject> toSortMap) {

    return sortedMap.entrySet().stream()
                    .sorted(Map.Entry.comparingByKey())
                    .map(entry -> toSortMap.get(entry.getValue()))
                    .collect(Collectors.toList());
}

测试:

Map<Integer,String> sorted = new TreeMap<>(Map.of(1,"id1","id0",3,"id3",2,"id2"));
Map<String,MyObject> toSort = Map.of(
    "id3",new MyObject("object3"),new MyObject("object1"),new MyObject("object0"),"id2",new MyObject("object2")
);

System.out.println(getSortedResultList(sorted,toSort));

System.out.println(getSortedResultList2(sorted,toSort));

两个输出相同:

[MyObject(field=object0),MyObject(field=object1),MyObject(field=object2),MyObject(field=object3)]
[MyObject(field=object0),MyObject(field=object3)]

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。