我正在嘗試計算代碼中串列中的所有重復數字。此外,串列應與集合進行比較;如果匹配,則相應的值應替換為另一個值。
我設法正確編程,但你能把它變成一個 for 回圈嗎?如果我在同一個回圈中得到它,地圖總是得到錯誤的值,因為這些值總是被覆寫。
這是我的代碼:
public static Map<Integer, Integer> replace(List<Integer> inputList, Set<Integer> numberSet, Integer newNumber) {
Map<Integer, Integer> map = new HashMap<>();
for (int i =0; i < inputList.size(); i ){
if(numberSet.contains(inputList.get(i))){
map.put(inputList.get(i), Collections.frequency(inputList, inputList.get(i)));
}
}
for (int i =0; i < inputList.size(); i ){
if(numberSet.contains(inputList.get(i))){
inputList.set(i, newNumber);
}
}
return map;
}
uj5u.com熱心網友回復:
在同一回圈中更改串列時使用 Collections.frequency 會丟棄您的數字。這是一種在每次迭代中處理計數頻率的方法,同時更新等于 newNumber 的串列值。
如果您顯示的代碼為您提供了所需的輸出,那么我在這里撰寫了以下執行相同操作的單回圈解決方案。
public static Map<Integer, Integer> replace(List<Integer> inputList, Set<Integer> numberSet, Integer newNumber) {
Map<Integer, Integer> map = new HashMap<>();
for (int i = 0; i < inputList.size(); i ){
Integer value = inputList.get(i);
// value already in map, count 1 more
if(numberSet.contains(value) && map.containsKey(value)) {
map.put(value, map.get(value) 1);
// value not in map yet, count 1
} else {
map.put(value, 1);
}
// always set all list items to newNumber
inputList.set(i, newNumber);
}
return map;
}
uj5u.com熱心網友回復:
實際上,Collections.frequency這里根本不需要,因為它會inputList從一開始就重新計算每個元素的頻率。
使用Map::merge方法方便地計算元素的頻率,以便在同一迭代中對每個匹配值進行計數和替換:
public static Map<Integer, Integer> replace(List<Integer> inputList, Set<Integer> numberSet, Integer newNumber) {
Map<Integer, Integer> map = new HashMap<>();
for (int i =0; i < inputList.size(); i ) {
Integer v = inputList.get(i);
if(numberSet.contains(v)) {
map.merge(v, 1, Integer::sum);
inputList.set(i, newNumber);
}
}
return map;
}
測驗:
List<Integer> ints = Arrays.asList(1, 2, 3, 2, 3, 5, 3, 1, 4, 2);
System.out.println(ints);
System.out.println(replace(ints, Set.of(3, 4, 5), 9));
System.out.println(ints);
輸出:
- 3、4、5的頻率計算正確
- 所有出現的 3、4、5 設定為 9
[1, 2, 3, 2, 3, 5, 3, 1, 4, 2]
{3=3, 4=1, 5=1}
[1, 2, 9, 2, 9, 9, 9, 1, 9, 2]
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/367792.html
下一篇:二分查找演算法中的無限回圈
