簡體   English   中英

列表列表的交集Java

[英]Intersection of list of lists java

我試圖在Java中找到兩個列表的交集。

例如,

list1 = [[1][2][3][7][4,5,6][8,9][10]]

list2 = [[1][2][3,7,8][4,5,10][6,9]]

兩個列表的交點必須為[[1][2][3][7][4,5][6][8][9][10]]

這是因為,如果我們掃描list1中的第四個元素,它是[4,5,6],而在list2中,我們在列表中有[4,5],在單獨的子列表中有[6]。 因此,列表1中的子列表[4,5,6]在交集后被分成[4,5]和[6]。

任何幫助表示贊賞!

一種流的方法:

List<List<Integer>> l1
        = Arrays.asList(
                Arrays.asList(1),
                Arrays.asList(2),
                Arrays.asList(3),
                Arrays.asList(7),
                Arrays.asList(4, 5, 6),
                Arrays.asList(8, 9),
                Arrays.asList(10));
List<List<Integer>> l2
        = Arrays.asList(
                Arrays.asList(1),
                Arrays.asList(2),
                Arrays.asList(3, 7, 8),
                Arrays.asList(4, 5, 10),
                Arrays.asList(6, 9));
List<List<Integer>> intersect
        = l1.stream()
        .flatMap(sl1 -> l2.stream().map(sl2 -> {
            List<Integer> lout = new ArrayList<>();
            lout.addAll(sl1);
            lout.retainAll(sl2);
            return lout;
        }))
        .filter(l -> l.size() > 0)
        .distinct()
        .collect(Collectors.toList());

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM