我已经找到了解决问题的方法,但是可以随意添加或缩短我编写的代码!
这是我已经开发的代码:
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]);
}
}
}
}
答案 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()
获取同一对象的出现次数Set
希望有帮助。
我接下来要看什么?
Java Stream API供进一步阅读。