相关疑难解决方法(0)

使用Java的Collections.singletonList()?

Collections.singletonList()在Java中有什么用?据我所知,它返回一个包含一个元素的列表.为什么我想要一个单独的方法来做到这一点?不变性如何在这里发挥作用?

这个方法有没有特别有用的用例,而不仅仅是一个方便的方法?

java

147
推荐指数
4
解决办法
14万
查看次数

是否有标准的Java List实现,不允许向其添加null?

说我有一个List,我知道我永远不想添加null它.如果我向它添加null,则意味着我犯了一个错误.因此,每次我打电话,list.add(item)我都会打电话if (item == null) throw SomeException(); else list.add(item);.是否存在List为我这样做的现有类(可能在Apache Commons或其他内容中)?

类似的问题:帮助删除Java列表中的空引用?但我不想删除所有空值,我想确保它们从未被添加到第一位.

java collections null list

25
推荐指数
4
解决办法
4万
查看次数

Objects :: nonNull和x - > x!= null之间有什么区别吗?

考虑以下课程:

import java.util.Objects;
import java.util.function.Predicate;

public class LambdaVsMethodRef {
    public static void main(String[] args) {
        Predicate<Object> a = Objects::nonNull;
        Predicate<Object> b = x -> x != null;
    }
}
Run Code Online (Sandbox Code Playgroud)

第一个谓词是从方法引用创建的,另一个是lambda表达式.这些谓词具有相同的行为(nonNull正文是正确的return obj != null;).lambda缩短了两个字符(可能允许流管道适合一行).

除了代码风格,之间有什么区别?换句话说,我应该更喜欢一个吗?Objects::nonNullx -> x != null

拉姆达-dev的和λ-库-规格- {观察员,专家}邮件列表邮件提isNull,nonNull以及isNotNull(初名)并没有解决这个问题.(我很惊讶没有人质疑添加Objects方法,因为它们可以用lambda轻松替换,但另一方面,也是如此Integer::sum.)

我也查看了字节码javap.唯一的区别是传递给lambda metafactory bootstrap方法的方法句柄:

  BootstrapMethods:
0: #16 invokestatic java/lang/invoke/LambdaMetafactory.metafactory:(Ljava/lang/invoke/MethodHandles$Lookup;Ljava/lang/String;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodType;Ljava/lang/invoke/MethodHandle;Ljava/lang/invoke/MethodType;)Ljava/lang/invoke/CallSite;
  Method arguments:
    #17 (Ljava/lang/Object;)Z
    #18 invokestatic java/util/Objects.nonNull:(Ljava/lang/Object;)Z
    #17 (Ljava/lang/Object;)Z
1: #16 invokestatic …
Run Code Online (Sandbox Code Playgroud)

java lambda java-8 method-reference

14
推荐指数
1
解决办法
8749
查看次数

Java8 Collections.sort(有时)不会对JPA返回的列表进行排序

Java8在我的JPA EclipseLink 2.5.2环境中继续做一些奇怪的事情.我不得不删除问题/sf/ask/1876432841/ 昨天,因为在这种情况下的排序受到奇怪的JPA行为的影响 - 我通过强迫在进行最终排序之前的第一个排序步骤.

仍然在Java 8中使用JPA Eclipselink 2.5.2,以下代码有时不会在我的环境中排序(Linux,MacOSX,两者都使用build 1.8.0_25-b17).它在JDK 1.7环境中按预期工作.

public List<Document> getDocumentsByModificationDate() {
    List<Document> docs=this.getDocuments();
    LOGGER.log(Level.INFO,"sorting "+docs.size()+" by modification date");
    Comparator<Document> comparator=new ByModificationComparator();
    Collections.sort(docs,comparator);
    return docs;
}
Run Code Online (Sandbox Code Playgroud)

从JUnit测试调用时,上述函数正常工作.在生产环境中进行debbuging时,我会得到一个日志条目:

INFORMATION: sorting 34 by modification date
Run Code Online (Sandbox Code Playgroud)

但是在TimSort中,nRemaining <2的返回语句被命中 - 因此不会发生排序.JPA提供的IndirectList(请参阅jpa返回的集合?)被认为是空的.

static <T> void sort(T[] a, int lo, int hi, Comparator<? super T> c,
                     T[] work, int workBase, int workLen) {
    assert c != null && a != null && lo >= 0 && lo <= hi …
Run Code Online (Sandbox Code Playgroud)

java sorting jpa eclipselink java-8

12
推荐指数
1
解决办法
4191
查看次数

singletonList有什么用?

我正在寻找一些优雅的解决方案来从List中删除空值.我发现了以下帖子,其中说我可以使用 list.removeAll(Collections.singletonList(null));

但是,这会抛出UnsupportedOperationException,我假设是因为UnsupportedOperationException它试图对不可变的singleton集合进行一些变异操作.它是否正确?

如果是这种情况,那么singleList的典型用法是什么?要在您确定不想对集合实际执行任何操作时表示大小为1的集合?

提前致谢.

java collections list

11
推荐指数
1
解决办法
1万
查看次数

标签 统计

java ×5

collections ×2

java-8 ×2

list ×2

eclipselink ×1

jpa ×1

lambda ×1

method-reference ×1

null ×1

sorting ×1