番石榴ComparisonChain为什么它不会在第一次比较后终止非零结果

sun*_*nny 2 java guava comparisonchain

番石榴的比较链是不应该懒惰地评价比较?在下面的代码中NullComparator(阿帕奇)将返回一个非零值,如果不链终止?

文档:ComparisonChain实现停止调用其输入'compareTo并比较方法一旦其中一个返回非零结果

    String x = null;
    String y = "y";
    ComparisonChain.start().compare(x,y, new NullComparator(false)).
            compare(x.getBytes().toString(), y.getBytes().toString()).result();
Run Code Online (Sandbox Code Playgroud)

注意:上面只是一个例子.也许这将是更好的例子

ComparisonChain.start().compare(x,y, new NullComparator(false)).
        compare(x.getBytes(), y.getBytes(), UnsignedBytes.lexicographicalComparator()).result();
Run Code Online (Sandbox Code Playgroud)

Tav*_*nes 5

没有任何东西可以从评估停止的Java 参数compare(),即使该方法不执行任何操作. x.getBytes()因为会抛出NPE xnull.

也许这会起作用?

return Ordering.onResultOf(new Function<String, String>() {
            @Override
            public String apply(String input) {
                return input.getBytes().toString();
            }
        })
        .nullsFirst()
        .compare(x, y);
Run Code Online (Sandbox Code Playgroud)

请记住,虽然input.getBytes().toString()排序可能没有多大意义(看起来像[B@35c41b).