是否有一个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; } });
是的,它很丑陋有两个原因:
- Java(尚未)支持作为一等公民的function,它们使用Single-Abstract-Method接口进行模拟。
-
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应该是相当直接的。