我试着像那样绕圈
// ArrayList tourists
for (Tourist t : tourists) {
if (t != null) {
t.setId(idForm);
}
}
但这并不好。谁能给我一个更好的解决办法?
一些有用的基准可以帮助你做出更好的决定:
While循环,For循环和迭代器性能测试
我试着像那样绕圈
// ArrayList tourists
for (Tourist t : tourists) {
if (t != null) {
t.setId(idForm);
}
}
但这并不好。谁能给我一个更好的解决办法?
一些有用的基准可以帮助你做出更好的决定:
While循环,For循环和迭代器性能测试
当前回答
list.removeAll(Collections.singleton(null));
如果你在数组上使用它,它会抛出UnsupportedException。asList因为它给了你不可变的副本,所以它不能被修改。请参阅下面的代码。它创建可变副本,不会抛出任何异常。
public static String[] clean(final String[] v) {
List<String> list = new ArrayList<String>(Arrays.asList(v));
list.removeAll(Collections.singleton(null));
return list.toArray(new String[list.size()]);
}
其他回答
for (Iterator<Tourist> itr = tourists.iterator(); itr.hasNext();) {
if (itr.next() == null) { itr.remove(); }
}
有一种简单的方法可以从集合中删除所有空值。必须将包含null的集合作为参数传递给removeAll()方法
List s1=new ArrayList();
s1.add(null);
yourCollection.removeAll(s1);
使用Java 8,可以使用stream()和filter()来实现这一点。
tourists = tourists.stream().filter(t -> t != null).collect(Collectors.toList())
or
tourists = tourists.stream().filter(Objects::nonNull).collect(Collectors.toList())
更多信息:Java 8 -流
如果你更喜欢不可变的数据对象,或者你不想破坏输入列表,你可以使用Guava的谓词。
ImmutableList.copyOf(Iterables.filter(tourists, Predicates.notNull()))
Try:
tourists.removeAll(Collections.singleton(null));
阅读Java API。代码将为不可变列表抛出java.lang.UnsupportedOperationException(例如使用Arrays.asList创建的列表);更多细节请看这个答案。