我如何用Java编写以下python行?
a = [True, False]
any (a)
all (a)
Run Code Online (Sandbox Code Playgroud)
inb4"你尝试过什么?"
在大锤的办法是写我自己all
和any
方法(和显然是一个类来承载他们):
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()
.
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)
在Java 7及更早版本中,标准库中没有用于执行此操作的内容。
在Java 8中,您应该可以使用Stream.allMatch(...)
或Stream.anyMatch(...)
用于此类事情,尽管我不确定从性能角度来看这是否合理。(首先,您需要使用Boolean
而不是boolean
...)
归档时间: |
|
查看次数: |
4420 次 |
最近记录: |