如何比较许多字符串数组?

时间:2016-09-06 18:36:11

标签: java arrays

我有很多字符串数组,例如:

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循环比较两个字符串数组,但是对于许多这样的数组怎么做呢?

2 个答案:

答案 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数组。 还要记住,首先必须消除同一阵列中的常用词。