我有很多字符串数组,例如:
private String[] ar1= {"Cheese", "Pepperoni", "Books"};
private String[] ar2= {"Books", "Pepperoni", "Greatness"};
private String[] ar3= {"Whatever", "Whenever", "Pepperoni"};
如何比较所有这三个数组并得到一个单词" Pepperoni"在ar1,ar2和ar3之间是常见的,例如" Books"在ar2和ar1之间是否通用?我能够使用for循环比较两个字符串数组,但是对于许多这样的数组怎么做呢?
答案 0 :(得分:6)
我会用一套
Set<String> words = new HashSet<>(Arrays.asList(ar1));
words.retainAll(Arrays.asList(ar2));
words.retainAll(Arrays.asList(ar3));
这将采用每个数组的交集。
更高级的选项是查看在许多数组中出现多次的单词。
Map<String, Long> words = Stream.of(ar1, ar2, ar3, ar4, ar5)
.flatMap(Stream::of)
.collect(Collectors.groupingBy(w -> w,
Collectors.counting()));
这会为您提供每个单词的地图以及它出现的次数。您可以根据需要添加更多数组。
答案 1 :(得分:0)
您可以创建一个字典,其中键是单词。现在,您迭代所有单词并添加到字典中:
如果单词不在dict中:
dict[word] = 1;
否则:
dict[word]++;
最后,你遍历字典,所有值为3的键都是树数组之间的共同点,这个想法可以用于k数组。 还要记住,首先必须消除同一阵列中的常用词。