rav*_*rab 11 java arrays collections colt guava
我有一个整数数组列表.我需要找到它们之间的共同元素.我能想到的是两个列表中Common元素中列出的内容的扩展
Example would be
[1,3,5],
[1,6,7,9,3],
[1,3,10,11]
should result in [1,3]
Run Code Online (Sandbox Code Playgroud)
数组中也没有重复项.
有没有直接的方法来做到这一点?
Ami*_*ost 16
您可以将列表转换为集合,然后使用Set.retainAll方法在不同集合之间进行交集.一旦与所有集相交,就会留下公共元素,并且可以将结果集转换回列表.
Ous*_*ami 10
您可以使用Guava提供的Set的交集方法,这是一个小例子:
public <T> Set<T> intersection(List<T>... list) {
Set<T> result = Sets.newHashSet(list[0]);
for (List<T> numbers : list) {
result = Sets.intersection(result, Sets.newHashSet(numbers));
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
希望能帮助你
与Java 8
ArrayList retain = list1.stream()
.filter(list2::contains).filter(list3::contains).collect(toList())
Run Code Online (Sandbox Code Playgroud)
我们可以使用retainAll集合的方法.我commons用第一个数组列表初始化了我的arraylist,并为每个剩下的arraylists调用了它.
List<List<Integer>> lists = new ArrayList<List<Integer>>();
lists.add(new ArrayList<Integer>(Arrays.asList(1, 3, 5)));
lists.add(new ArrayList<Integer>(Arrays.asList(1, 6, 7, 9, 3)));
lists.add(new ArrayList<Integer>(Arrays.asList(1, 3, 10, 11)));
List<Integer> commons = new ArrayList<Integer>();
commons.addAll(lists.get(1));
for (ListIterator<List<Integer>> iter = lists.listIterator(1); iter.hasNext(); ) {
commons.retainAll(iter.next());
}
System.out.println(commons);
System.out.println(lists.get(1));
Run Code Online (Sandbox Code Playgroud)