【发布时间】:2017-09-05 11:32:22
【问题描述】:
我有一个元素列表,每个元素都有一个映射,有整数键和任何对象值,没关系。然后对于我列表中的每个元素,我想在元素映射中进行排列。
<Map<Integer,Object> myMap= {[0,null] [1,A]; [2,B]; [3,C]; [4,D]};
经过一些操作后,我得到了一个排列图,例如:
Map<Integer,Integer> changes = {1=2, 2=3, 3=4, 4=1}
所以我想重新排列我的列表以拥有
Map<Integer,Object> myMap = {[0,null] [1,B]; [2,C]; [3,D]; [4,A]};
是否可以使用我保存 myList 数据的其他列表来完成 worgout,然后根据排列设置我的 List-s 项目?
我可以通过使用如下的帮助列表来做到这一点:
Map<Integer,Object> helperMap= {[0,null] [1,A]; [2,B]; [3,C]; [4,D]};
然后
changes.forEach((key,value) ->{
myList.set(key,helperList.get(value));
}
我曾考虑只使用一个变量来存储一个元素,但我无法做到,而且我真的没有更好的主意。 如果有的话,你能给我一个比这更好的主意吗?
注意:我知道有一个 Collections.rotate 方法,它做类似的事情,但我列表中的元素非常复杂,我想通过它们的 id 重新排序它们。 每次重新排序后,编号系统(或元素 ID)不会仅更改数据本身,并且每次编号都是从 1 升序到 elements.size()-1。
编辑:反转列表中的值以更好地表示我拥有的数据。
Edit2 : 列表替换为地图,因此在我想要执行此操作的每张地图的列表中。
【问题讨论】:
-
你能把项目变成一个数字,代表它们在列表中的位置,所以如果你按这个数字对它们进行排序,它们就会按顺序排列,如果是这样,你可以这样做
items.sort(Comparator.comparingInt(<SOME CODE>))而不是排序手动? -
这段代码不会给你语法错误吗?
-
@jrtapsell 在后台是复杂的结构,所以我不能只使用
Collections.sort使用自定义比较器。 @Jayesh 当然它不会编译,这只是一个展示我想要的模型。 -
你不能在第二个数字上使用 compareInt 来按秒对列表进行排序,并将项目加入位置对
-
列表中元素的数据结构是什么
标签: java list permutation