幕布斯6054654
2022-09-21 16:48:03
我需要解析排序數字的列表,然后找出順序中有多少個數字的計數。List<Integer> sortedNum = Arrays.asList(1, 2, 3, 8, 10);因此,在此列表中,我期望結果為.{1;3},{8;1},{10;1}如果沒有流,代碼看起來像這樣,Map<Integer, Integer> countMap = new HashMap<>();int i = 0;while (true) { int num = sortedNum.get(i); int count = 0; while (i < sortedNum.size()) { count++; i++; if (i == sortedNum.size()) { break; } if ((sortedNum.get(i - 1) + 1) < sortedNum.get(i)) { break; } } countMap.put(num, count); if (i == sortedNum.size()) { countMap.forEach((a, b) -> System.out.println(a + " " + b)); break; }}是否可以通過迭代 IntStream 將其轉換為流操作?任何幫助將不勝感激。
2 回答

HUH函數
TA貢獻1836條經驗 獲得超4個贊
我不認為這是一項受益于流API的任務。不過,您可以簡化代碼:
Map<Integer, Integer> countMap = new LinkedHashMap<>();
Integer v = sortedNum.isEmpty()? null: sortedNum.get(0);
int count = 0;
for(Integer i: sortedNum) {
if(v + count == i) count++;
else {
countMap.put(v, count);
v = i;
count = 1;
}
}
if(v != null) countMap.put(v, count);
countMap.forEach((a, b) -> System.out.println(a + " " + b));
1 3
8 1
10 1
可以通過實現自定義來表達這樣的操作,但是代碼會更復雜,同時基本上與累加器函數中的循環體相同。但除此之外,它還需要一個合并函數,這對于此操作來說并非微不足道。Collector

呼喚遠方
TA貢獻1856條經驗 獲得超11個贊
我假設你想要一個新的數字流與價值和計數。
我能想到的最簡單的方法就是使用地圖,確實如此。
List<NumWithValueAndCount> newListOfNumWithValueAndCount = Arrays.stream(sortedArrayOfNumWithValue) .map(oldNum -> new NumWithValueAndCount(oldNum.getNum(), oldNum.getValue(), methodToGetCount())) .collect(Collectors.toList());
添加回答
舉報
0/150
提交
取消