Java相当于python all和any

Hyp*_*eus 11 python java

我如何用Java编写以下python行?

a = [True, False]
any (a)
all (a)
Run Code Online (Sandbox Code Playgroud)

inb4"你尝试过什么?"

在大锤的办法是写我自己allany方法(和显然是一个类来承载他们):

public boolean any (boolean [] items)
{
    for (boolean item: items)
        if (item) return true;
    return false;
}

//other way round for all
Run Code Online (Sandbox Code Playgroud)

但我不打算重新发明轮子,必须有一个简洁的方法来做到这一点......

Mat*_*all 10

any()是同样的事情Collection#contains(),这标准库的一部分,实际上是在所有的实例方法Collection的实施方式.

all()但是,没有内置功能.除了你的"大锤"方法之外,你最接近的是谷歌番石榴 Iterables#all().

  • 我的心充满了悲伤,我的眼里充满了泪水.谢谢.等待CD接受. (4认同)
  • any()和Collection#contains()是不一样的。可以给any()一个可迭代的对象,一旦它在可迭代对象中遇到真实值,它将返回True。这里的重要部分是在Python中,您通常使用生成器表达式来提供可迭代的内容。例如:“ any(path.startswith(prefix)for collection_of_prefixes中的前缀)”。这使得any()对于任意测试很有用。“ Collection#contains()”仅支持“等于”测试。Java 8流API“ anyMatch()”测试是一个很好的等效项。 (2认同)

sev*_*rce 9

Java 8 流 API 的一个例子是:

Boolean[] items = ...;
List<Boolean> itemsList = Arrays.asList(items);
if (itemsList.stream().allMatch(e -> e)) {
    // all
}
if (itemsList.stream().anyMatch(e -> e)) {
    // any
}
Run Code Online (Sandbox Code Playgroud)

第三方库的解决方案hamcrest

import static org.hamcrest.Matchers.everyItem;
import static org.hamcrest.Matchers.hasItem;
import static org.hamcrest.Matchers.is;

if (everyItem(is(true)).matches(itemsList)) {
    // all
}
if (hasItem(is(true)).matches(itemsList)) { // here is() can be omitted
    // any
}
Run Code Online (Sandbox Code Playgroud)


Ste*_*n C 5

在Java 7及更早版本中,标准库中没有用于执行此操作的内容。

在Java 8中,您应该可以使用Stream.allMatch(...)Stream.anyMatch(...)用于此类事情,尽管我不确定从性能角度来看这是否合理。(首先,您需要使用Boolean而不是boolean...)