我想從串列中隨機列出一個串列,但是條件有點棘手,所以我正在考慮如何實作它。
串列 [A1,A2,A3,B1,B2,B3,C1,C2,C3]
例子
結果1 [A1,B1,A2,C1,A3,B2,C2,C3,B3] 結果2 [C1,B1,B2,A1,A2,B3,C2,A3,C3]
我想將它與維護訂單一起放入新串列中。
有演算法上的好方法嗎?
uj5u.com熱心網友回復:
如果您從概念上將資料安排為HashMap<Integer, Queue<T>>,結構為
0: A1,A2,A3
1: B1,B2,B3
2: C1,C2,C3
然后一旦你選擇了你的亂數,你就可以map.get(number).dequeue()得到你的價值
uj5u.com熱心網友回復:
您可以通過使用隨機排列它們Collections.shuffle()然后使用地圖更正它們來做到這一點。
static List<String> shuffleTrickey(List<String> list) {
List<String> copy = new ArrayList<>(list);
Collections.shuffle(copy);
Map<String, Deque<String>> map = list.stream()
.collect(Collectors.groupingBy(s -> s.substring(0, 1),
Collectors.toCollection(ArrayDeque::new)));
return copy.stream()
.map(s -> map.get(s.substring(0, 1)).pop())
.toList();
}
public static void main(String[] args) {
List<String> list = Arrays.asList("A1", "A2", "A3", "B1", "B2", "B3", "C1", "C2", "C3");
List<String> result = shuffleTricky(list);
System.out.println(result);
}
輸出:
[C1, A1, B1, C2, B2, B3, A2, C3, A3]
改組后首字母相同的元素將保持順序。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/369858.html
