如何在数组中打印重复项?

时间:2019-09-11 08:46:12

标签: java

我已经找到了解决问题的方法,但是可以随意添加或缩短我编写的代码!

这是我已经开发的代码:

public static void main(String[] args) {     

            Scanner sc = new Scanner(System.in);
            System.out.print("Input Array Length:"); // limit of array

            int n=sc.nextInt();
            System.out.println();


            String  arr[]=new String [n];

            for (int i = 0; i < arr.length; i++) {

                System.out.println("Enter elements:"); // elements of array
                arr[i] = sc.next();
            }



            for (int i = 0; i < arr.length -1; i++) { // start loop

                for (int j = i+1; j < arr.length; j++) 
                {
                    if( (arr[i].equals(arr[j]))) // condition to find duplicate
                    {
                        System.out.println("Duplicate Element is : "+arr[j]);
                    }
                }
            }
        }

2 个答案:

答案 0 :(得分:1)

一种可能的解决方案是创建一个Map,其中key是数组中的唯一项,而value-项的计数:

Set<String> duplicates = Arrays.stream(arr)
                               .collect(Collectors.groupingBy(Function.identity(), Collectors.counting())).entrySet().stream()
                               .filter(entry -> entry.getValue() > 1)
                               .map(Map.Entry::getKey)
                               .collect(Collectors.toSet());

答案 1 :(得分:0)

好吧,如果您正在寻找更易读和优雅的代码,此代码段可能会有所帮助。

String[] myStringArray = { "A", "B", "C", "D", "E" , "A", "B", "A", "AC"};
    List<String> allStr = Arrays.asList( myStringArray );
    Set<String> duplicateStrings = allStr.stream()
            .filter(i -> Collections.frequency(allStr, i) >1)
            .collect(Collectors.toSet());
    System.out.println(duplicateStrings);

说明[一如既往:-)]:

  • 从您的字符串数组创建流以进行处理
  • 过滤重复的字符串,以便以后打印
  • 使用Collections.frequency()获取同一对象的出现次数
  • 如果它大于一个,则表示重复,我们将保留它以便可以打印(或使用)
  • 最后,将Filter操作的所有输出收集到Set
  • 由于设置不允许重复,它将保留重复单词(字符串对象)的单个值

希望有帮助。

我接下来要看什么?

Java Stream API供进一步阅读。