在Map中查找数组值的重复出现

问题描述 投票:0回答:1
        Map<String, int[]> nameWithLuckyNumbers = null;
        List<List<String>> finalGroup = new ArrayList<>();

        nameWithLuckyNumbers.put("Vinay" , new int[]{1, 2, 4}) ;
        nameWithLuckyNumbers.put("Ajith" , new int[]{1,3 ,4,5, 8}) ;
        nameWithLuckyNumbers.put("Karthi" ,new int[]{9,6,7}) ;
        nameWithLuckyNumbers.put("Surya" ,new int[]{10,11,12});
        nameWithLuckyNumbers.put("Prabhu" ,new int[]{10,11,12});
        nameWithLuckyNumbers.put("kumar" ,new int[]{8,14,15});

        for(Map.Entry<String, int[]> entry:nameWithLuckyNumbers.entrySet()) {
            for (int number : entry.getValue()) {
               /*I need Logic here.
                 Values (one array) has to be compared with another Values(Another Array).
                 if any one number is matching between 2 arrays-
                  that corresponding Keys should come under same List.
                if the Numbers inside Array (Value of key) is not matching with anyother Key's Value ,
                that should come in new List ,Not in the same List*/
            }
        }

逻辑解释:

键“Vinay”和“Ajith”在数组中具有相同的值[1,4]

所以它们必须被分组在一起。

List1.add("vinay");
List1.add("ajith");

密钥 Kumar 和 Ajith 在数组中具有相同的值 [8]。

所以 kumar 也必须归为一组。

List1.add("kumar");

键“Surya”和“Prabhu”在其 valueArray 中具有相同的值。

因此创建 NewList List2。

List2.add("Surya");
List2.add("Prabhu");

键“Karthi”的值与任何其他键的值不匹配,因此,应将其添加到单独的列表中。

List3.add("Karthi");

输出:

输出应该是列表的列表。

List<List<String>> finalGroup = new ArrayList<>();
finalGroup.addAll(List1);
finalGroup.addAll(List2);
finalGroup.addAll(List3);
return finalGroup;
java arraylist java-8 hashmap grouping
1个回答
0
投票

你想要的是不相交的集合。先看看理论,我会在这里以简化的方式告诉你剩下的。

  1. 一般来说,每个元素都会为自己设置代表。
  2. 当A和B共享连接时,B代表将被设置为A的代表->A。
  3. 当B和C共享代表时,C将被设置为B的代表->A。

然后你将拥有有限的一组代表,这些代表将是你的 List1、List2 等等。

如果您有任何疑问,请不要费心去问:)

© www.soinside.com 2019 - 2024. All rights reserved.