是否有一个Java相当于Javascript的“一些”方法?

我有一个集合,我想知道至少有一个元素是否满足某些条件。 从本质上讲,我想在JavaScript中做些什么,我想对集合做些什么!

查看Guava的Iterables类及其any()实现。

与其他答案中的Commons Collections示例大致相同,但是通用化:

 List strings = Arrays.asList("ohai", "wat", "fuuuu", "kthxbai"); boolean well = Iterables.any(strings, new Predicate() { @Override public boolean apply(@Nullable String s) { return s.equalsIgnoreCase("fuuuu"); } }); System.out.printf("Do any match? %s%n", well ? "Yep" : "Nope"); 

您可以使用Apache commons-collections中的CollectionUtils :

 List primes = Arrays.asList(3, 5, 7, 11, 13) CollectionUtils.exists(primes, even); //false 

even是谓词:

 Predicate even = new Predicate() { public boolean evaluate(Object object) { return ((Integer)object) % 2 == 0; } } 

或者在内联版本中:

 List primes = Arrays.asList(2, 3, 5, 7, 11, 13) CollectionUtils.exists(primes, new Predicate() { public boolean evaluate(Object object) { return ((Integer)object) % 2 == 0; } }); 

是的,它丑陋有两个原因:

  1. Java(尚未)支持作为一等公民的function,它们使用Single-Abstract-Method接口进行模拟。
  2. commons-collections不支持generics。

另一方面,在Scala等现代JVM语言中,您可以编写:

 List(3,5,7,11,13,17).exists(_ % 2 == 0) 

从Java 8开始,您可以将Collection转换为Stream并使用anyMatch,如以下示例所示。

 import java.util.Arrays; import java.util.List; public class SomeExample { public static void main(String[] args) { List list = Arrays.asList(1, 2, 3, 4, 5, -6, 7); boolean hasNegative = list.stream().anyMatch(x -> x < 0); if (hasNegative) { System.out.println("List contains some negative number"); } else { System.out.println("List does not contain any negative number"); } } } 

Java没有内置的此function。 Javascript的some()接受一个函数指针作为参数,这不是Java本身支持的东西。 但是,使用循环和回调function的接口来模拟Java中some()的function应该是相当直接的。