Java 多个阵列列表。。。如何有效地查找出现在两个或多个列表中的元素?

Java 多个阵列列表。。。如何有效地查找出现在两个或多个列表中的元素?,java,Java,我有一个可变数量的数组列表。确定两个或多个列表中出现的元素的最有效方法是什么 例如: [苹果、香蕉、橘子] [猕猴桃、苹果、葡萄] [梨,葡萄,苹果] [蓝莓、鳄梨、猕猴桃] 我需要一个函数返回: [苹果、猕猴桃、葡萄] 最有效的方法是什么?我可以有数百个阵列,每个阵列包含数百个元素。如果有数百个阵列包含数百个元素,那么就不必担心效率。即使是非常低效的解决方案也会在现代硬件上很快完成。我建议你专注于解决方案的优雅,只有在必须的时候才考虑效率。 你说过这些都是列表,所以我假设每个列表中都可能有重复

我有一个可变数量的数组列表。确定两个或多个列表中出现的元素的最有效方法是什么

例如:

[苹果、香蕉、橘子]

[猕猴桃、苹果、葡萄]

[梨,葡萄,苹果]

[蓝莓、鳄梨、猕猴桃]

我需要一个函数返回:

[苹果、猕猴桃、葡萄]


最有效的方法是什么?我可以有数百个阵列,每个阵列包含数百个元素。

如果有数百个阵列包含数百个元素,那么就不必担心效率。即使是非常低效的解决方案也会在现代硬件上很快完成。我建议你专注于解决方案的优雅,只有在必须的时候才考虑效率。

你说过这些都是列表,所以我假设每个列表中都可能有重复项,也就是说,如果一个项目在一个列表中出现两次,那么它就不会被认为出现在“两个或多个列表”中

List<List<String>> input;
Map<String,Long> occurrences = input.stream()
    .flatMap(l -> l.stream().distinct())
    .collect(Collectors.groupingBy(l -> l, Collectors.counting()));
列表输入;
映射出现次数=input.stream()
.flatMap(l->l.stream().distinct())
.collect(Collectors.groupingBy(l->l,Collectors.counting());

这将计算包含每个项目的列表数。您可以使用
executes.keySet().stream().filter(i->executes.get(i)>1)

[apple,apple]
作为数组之一吗?使用a来计算出现的次数。或者使用一个集合并获取相关集合的交集。您只需执行一次即可找到所有公共元素,然后就可以缓存结果。实现说明:这看起来是一个很大的n^3问题,但事实并非如此。前两个列表的交集仅为[apple],然后是与第三个列表交集的同步,时间方面。如果先相交最小的集合,则在以后的步骤中可以相交较小的集合,从而节省时间。@markspace我可能误解了您的意思,但我不想在所有数组中找到所有相同的元素。我不是在寻找所有数组的交集。我正在寻找出现在两个或多个数组中的元素。