bps*_*ngh 3 java list arraylist duplicates java-8
给定n个列表,我想知道是否有任何两个列表具有完全相同的元素.下面是Java 7中的代码.
public static <T> boolean hasduplicateList(List<List<T>> lists) {
for (List<T> outerList : lists) {
int count = 0;
Set<T> outerSet = new HashSet<>(outerList);
for (List<T> innerList : lists) {
Set<T> innerSet = new HashSet<>(innerList);
if (outerSet.equals(innerSet)) {
count++;
}
if (count == 2) {
return true;
}
}
}
return false;
}
Run Code Online (Sandbox Code Playgroud)
是否有更好的方法来实现特别使用Java8?
因为在Java 7代码中List,Set在比较之前将s 转换为s ,似乎您要检查输入中是否至少有2个List具有相同的元素集(忽略重复或顺序).
您可以通过流式传输List并将其转换Stream为Sets 来在Java 8中实现此目的.然后你要做的就是找出不同Sets 的数量是否小于输入的大小List:
public static <T> boolean hasduplicateList(List<List<T>> lists) {
return
lists.stream() // create a <Stream<List<T>>
.map(HashSet::new) // transform Stream<List<T>> to Stream<HashSet<T>>
.distinct() // keep only distinct Sets
.count() < lists.size();
}
Run Code Online (Sandbox Code Playgroud)
测试:
public static void main (String[] args)
{
List<String> alist = Arrays.asList ("a","b","c");
List<String> blist = Arrays.asList ("b","c","c","a");
List<String> clist = Arrays.asList ("e","d","c","a");
List<List<String>> llist1 = Arrays.asList (alist,blist);
List<List<String>> llist2 = Arrays.asList (alist,clist);
System.out.println ("has dups? " + hasduplicateList (llist1));
System.out.println ("has dups? " + hasduplicateList (llist2));
}
Run Code Online (Sandbox Code Playgroud)
输出:
has dups? true
has dups? false
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2954 次 |
| 最近记录: |