亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

讀取對象流,然后更新對象中的計數

讀取對象流,然后更新對象中的計數

幕布斯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


查看完整回答
反對 回復 2022-09-21
?
呼喚遠方

TA貢獻1856條經驗 獲得超11個贊

我假設你想要一個新的數字流與價值和計數。

我能想到的最簡單的方法就是使用地圖,確實如此。

List<NumWithValueAndCount> newListOfNumWithValueAndCount = Arrays.stream(sortedArrayOfNumWithValue)
    .map(oldNum -> new NumWithValueAndCount(oldNum.getNum(), oldNum.getValue(), methodToGetCount()))
    .collect(Collectors.toList());


查看完整回答
反對 回復 2022-09-21
  • 2 回答
  • 0 關注
  • 115 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號