- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我目前正在编写电梯模拟程序。因此,我需要创建一个 ListMultiMap“passengerFloorMap”来存储以下值:
现在我需要洗牌“passengerFloorMap”的键。需要这样做,以创建到达乘客的随机顺序。例如:首先是“passengerFloorMap”{1=[2,4], 1=[3,4], 1=[1,0], ...}
然后只对键进行打乱,因为我想稍后选择关联的值:
`private List<Integer> shuffleKeyList(){
keySet = new ArrayList<>(passengerFloorMap.keySet());
Collections.shuffle(keySet);
return keySet;
}
` Return example: [12, 130, 15, ...]
之后我创建了另一个函数来创建新的 MultiMapList“randomOrder”。应存储新的键顺序 ([12, 130, 15, ...])。我还想从“passangerFloorMap”获取这些键的关联值。因此结果应如下所示:randomOrder = {12=[3,1], 130=[0,4], 15=[2,1], ...}。为了实现这一点,我将打乱的列表存储到 ArrayList 中:
List<Integer> shuffledList = new ArrayList<>();
private List<Integer> shuffleKeyList(){
List<Integer> keySet = new ArrayList<>(passengerFloorMap.keySet());
Collections.shuffle(keySet);
return keySet;
}
private void pickRandomPassanger(){
ListMultimap<Integer, Integer> randomOrder = ArrayListMultimap.create();
ArrayList<Integer> list = new ArrayList<>();
shuffledList = shuffleKeyList();
for (int i = 0; i < shuffledList.size(); i++){
liste.add(shuffledList.get(i));
}
}
现在我想用键(按照随机播放后的新顺序)和关联值填充“randomOrder”。为此,我创建了一个 for 循环(在 pickRandomPassenger 中):3只是一个例子,将被替换为正确的值
for(int j = 0; j < liste.size(); j++){
randomOrder.put(liste.get(j), 3);
}
那么现在问题来了。如果我调用 randomOrder.put(liste.get(j), x) ,它会检索到与调用 randomOrder.put(liste.get(0), x) 不同的值。另外,如果 j = 0。这是我的输出:
keySet = [46, 39, 81, 38, 34, 87, 20, 71, 32,...]
list = [46, 39, 81, 38, 34, 87, 20, 71, 32,...]
randomOrder = {1=[3], 2=[3], 3=[3], 4=[3], 5=[3], 6=[3], 7=[3], 8=[3], 9=[3], ...]
但是,如果我打电话
randomOrder.put(list.get(0), 3)
它检索:
randomOrder = {46=[3]}
我发现问题应该是由内存引用引起的。但我不知道如何解决这个问题。希望你们中的一些人可以提供帮助。
最佳答案
我猜你想说的是你期望第一个元素是 46=[3],而不是 1=[3]?
你选错了类(class)。 ArrayListMultimap 仅保证保持键内元素的插入顺序,例如如果您插入 (46, 4) 后跟 (46, 3),您将得到 {46=[4, 3]}。但如果您使用不同的键插入,它会使用 HashMap 来确定该顺序。
如果你想保持键的插入顺序,你需要 LinkedListMultimap .
关于java - ListMultimap 不保留插入顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60756285/
我目前正在编写电梯模拟程序。因此,我需要创建一个 ListMultiMap“passengerFloorMap”来存储以下值: 乘客 ID 乘客起始楼层 乘客的目的地楼层 现在我需要洗牌“passen
所以我有一个 ListMultimap我想转换为 List包含相同 Integer 的重复项如果有 >1 个值与 Integer 关联输入ListMultimap 。例如,如果: ListMultim
我尝试使用Properties将ListMultimap写入文件,但这似乎不可能,请参阅问题Writing and reading ListMultimap to file using Propert
我想编写一个 REST 服务,它将排除键值,如下所示: LCD Samsung MOUSE HP MOUSE Dell DRINK COKE DRINK PEPSI
示例: 我想求和每个键中的元素,这基本上是一个元素“双数字”的ArrayList。Guava ArrayListMultimap是这样声明的: ListMultimap multimap = Lin
Guava MultiMap已实现ImmutableListMultimap和ImmutableSetMultimap 。鉴于我已经创建了一个 ImmutableListMultimap例如,我如何将
我试图在不使用 forEach 操作的情况下使用 java 8 将数据收集到 ListMultiMap 中。 如果我用 Java 7 编写代码,它将是这样的: ListMultimap result
我是一名优秀的程序员,十分优秀!