第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

多個循環(huán)代碼遷移到 java 8:這是最好的方法嗎?

多個循環(huán)代碼遷移到 java 8:這是最好的方法嗎?

慕后森 2024-01-05 10:32:14
我有以下舊式 java 多重循環(huán),我想將其轉換為 Java 8 流:    List<Integer> list1 = Arrays.asList(1,2,3);    List<Integer> list2 = Arrays.asList(3,5,6);    List<Integer> list3 = Arrays.asList(3,4,9);    boolean match = true;    int list1Size = list1.size();    int list2Size = list2.size();    for (int i = 0; i < list1Size; i++ ) {        for (int j = 0; j < list2Size && i < list1Size; j++) {            if (list2.get(j).equals(list1.get(i))) {                if (list3.get(j).equals(list1.get(i))) {                    System.out.println(list1.get(i));                }            }        }    }(輸出為:3)我能找到的最好方法是:    IntStream.range(0, list1Size).forEach(            ix1 -> {                    IntStream.range(0, list2.size()).forEach(                            ix2 -> {                                if (ix2 < list2.size() && ix1 < list1.size())                                    if (list2.get(ix2).equals(list1.get(ix1))) {                                        if (list3.get(ix2).equals(list1.get(ix1))) {                                            System.out.println(list1.get(ix1));                                        }                                    }                            }                    );            }    );這對我來說似乎不太有吸引力......請注意,我正在使用 2 個循環(huán)處理 3 個列表。有沒有更好的辦法?
查看完整描述

3 回答

?
qq_遁去的一_1

TA貢獻1725條經驗 獲得超8個贊

如果位置不重要,而您使用Set它,那么這將變得非常微不足道:

set1.retainAll(set2);
set1.retainAll(set3);

使用流你可以這樣做:

set1.stream()
   .filter(set2::contains)
   .filter(set3::contains)
   .collect(Collectors.toList());


查看完整回答
反對 回復 2024-01-05
?
慕斯王

TA貢獻1864條經驗 獲得超2個贊

你可以這樣做:

Set<Integer> set1 = new HashSet<>(list1);

IntStream.range(0, Math.min(list2.size(), list3.size()))
        .filter(i -> Objects.equals(list2.get(i), list3.get(i))) // check where index have the same value
        .mapToObj(list2::get) // get the value (as the values are equal could be also list3)
        .filter(set1::contains) // check if list1 contains the value
        .forEach(System.out::println);

輸出

3

轉換list1為集合 ( set1) 通過提高包含查詢 ( ) 的性能,可以顯著提高速度O(n) -> O(1)。


查看完整回答
反對 回復 2024-01-05
?
溫溫醬

TA貢獻1752條經驗 獲得超4個贊

由于第一個元素的索引List并不重要,因此您可以Stream遍歷元素list1并搜索同時list1出現(xiàn)在同一索引處的元素:list2list3


Optional<Integer> result = 

    list1.stream()

         .filter(IntStream.range(0,list2.size())

                          .filter(i -> list2.get(i).equals(list3.get(i)))

                          .mapToObj(list2::get)

                          .collect(Collectors.toSet())::contains)

        .findFirst();

或者,如果您只想打印第一個匹配項:


list1.stream()

     .filter(IntStream.range(0,list2.size())

                      .filter(i -> list2.get(i).equals(list3.get(i)))

                      .mapToObj(list2::get)

                      .collect(Collectors.toSet())::contains)

     .limit(1)

     .forEach(System.out::println);

管道IntStream生成同時出現(xiàn)在同一索引中Set的所有元素。搜索that的元素屬于 that 。list2list3filterlist1Set


查看完整回答
反對 回復 2024-01-05
  • 3 回答
  • 0 關注
  • 197 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

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

公眾號

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