要压缩成没有重复元素的新列表,可能有空元素。我需要帮助。
我遇到此错误“ Tester Error(个人交付4):使用[1]调用时,该方法返回[]而不是[1]”。
domainname.com/somefolder/page.html
// -------------助手--------------------------------- -------------------------------
domainname.com/morefolder/anotherfolder/onemorefolder/somefolder/page.html
答案 0 :(得分:1)
不清楚,如果要删除所有重复项或仅删除空值。这些可以消除骗子。
List<Comparable> l = ...; // The source list
List<Comparable> nl = new ArrayList<>(); // New list without dupes
Collections.sort(l);
Comparable last = UUIDs.randomUUID().toString(); // This one will never be in our source list
for (Comparable c: l) {
if (!Objects.equal(c, last)) { // Or some other null-safe equals function
nl.add(c);
}
last = c;
}
运行时间O(nlogn)。当然,列表中的元素需要实现明智的equals()
和hashCode()
。
Set<?> set = new HashSet<String>(); // Track "seen"
List<?> l = ...; // Original list
List<?> nl = new ArrayList<>(); // New list without dupes
for (Object o: l) {
if (!set.contains(o)) {
nl.add(o);
}
set.add(o);
}
运行时间为O(n),因为哈希集是恒定的查找时间。或更简单:
Set<?> set = new HashSet<String>(); // Will be collection without dupes
List<?> l = ...; // Original list
for (Object o: l) {
set.add(o); // Rely on set semantics to remove dupes
}
List<?> nl = new ArrayList<>(set);
当然,列表中的对象必须实现明智的equals()
和hashCode()
。
答案 1 :(得分:0)
使用Java 8,您可以使用Stream different解决此问题。
示例代码如下。希望对您有帮助。
// input data
List<String> a = new ArrayList<>();
a.add("A");
a.add("A");
a.add("A");
a.add(null);
a.add(null);
Iterator source = a.iterator();
Iterable<String> iterable = () -> source;
// logic code
Iterator temp = StreamSupport
.stream(iterable.spliterator(), false)
.distinct()
.collect(Collectors.toList()).iterator();
Iterable result = () -> temp;
// verify result
StreamSupport
.stream(result.spliterator(), false)
.forEach(System.out::println)
;