Tengo una colección y me gustaría saber si al menos un elemento cumple alguna condición. Esencialmente, lo que some hace en JavaScript, ¡me gustaría hacer en una colección!¿hay un Java equivalente al "algo" de JavaScript?
Respuesta
Salida Iterables
clase Guava 's y su aplicación any()
.
Más o menos lo mismo que el ejemplo Commons Colecciones en la otra respuesta, pero genericized:
List<String> strings = Arrays.asList("ohai", "wat", "fuuuu", "kthxbai");
boolean well = Iterables.any(strings, new Predicate<String>() {
@Override public boolean apply(@Nullable String s) {
return s.equalsIgnoreCase("fuuuu");
}
});
System.out.printf("Do any match? %s%n", well ? "Yep" : "Nope");
Java no tiene esta función incorporada. Javascript's some()
acepta un puntero a la función como argumento, que no es algo que sea compatible nativamente en Java. Pero debería ser bastante sencillo emular la funcionalidad de some()
en Java utilizando un bucle y una interfaz para la funcionalidad de devolución de llamada.
Puede utilizar CollectionUtils
de Apache commons-collections:
List<Integer> primes = Arrays.asList(3, 5, 7, 11, 13)
CollectionUtils.exists(primes, even); //false
Dónde even
es un predicado:
Predicate even = new Predicate() {
public boolean evaluate(Object object) {
return ((Integer)object) % 2 == 0;
}
}
o en una versión inline:
List<Integer> primes = Arrays.asList(2, 3, 5, 7, 11, 13)
CollectionUtils.exists(primes, new Predicate() {
public boolean evaluate(Object object) {
return ((Integer)object) % 2 == 0;
}
});
Sí, es feo para dos razones:
- Java no (todavía) admite funciones como ciudadanos de primera clase, que se emulan con la interfaz Single-Abstract-Method.
commons-collections
no es compatible con los genéricos.
Por otro lado, en los idiomas modernos como JVM Scala puede escribir:
List(3,5,7,11,13,17).exists(_ % 2 == 0)
Otra biblioteca de terceros para apoyar este método es Google guayaba, tiene [ 'Iterables.any () '] (http://guava-libraries.googlecode.com/svn/tags/release08/javadoc/com/google/common/collect/Iterables.html). – axtavt
Y la guayaba es compatible con los genéricos. ;) –
Java 8 tendrá lambdas. Además, las clases SAM ahora se llaman interfaces funcionales. –
- 1. ¿Hay un C++ equivalente al BigDecimal de Java?
- 2. ¿Hay un JavaScript equivalente para C# 'params'?
- 3. ¿Hay un equivalente a php.net para JavaScript?
- 4. ¿Hay algo equivalente a Sonar para Perl?
- 5. ¿Hay un Java equivalente a libevent?
- 6. ¿Hay un equivalente Java de frexp?
- 7. ¿Hay un equivalente de ucwords en java
- 8. ¿Hay algo así como Codecademy para Java
- 9. ¿Hay un Java equivalente a MISRA C?
- 10. ¿Hay equivalente epoll en Java?
- 11. ¿Hay un equivalente Java para LINQ?
- 12. ¿Hay un equivalente a memcpy() en Java?
- 13. ¿Hay un equivalente en JavaScript de Ruby's andand?
- 14. ¿Hay algo así como un desminificador de javascript (deobfuscator)?
- 15. ¿Hay un puerto Java o equivalente de la biblioteca EventStore?
- 16. Para los programadores de Python, ¿hay algo equivalente al CPAN de Perl?
- 17. NSPredicar algo equivalente al GRUPO de SQL POR
- 18. ¿Hay un equivalente de Ruby al extracto de PHP?
- 19. ¿Tiene C# un equivalente al encodeURIComponent() de JavaScript?
- 20. ¿Hay un JUnit equivalente al atributo testcase de NUnit?
- 21. ¿Hay un equivalente del método de Java igual en C++?
- 22. ¿Hay algo como .NET's T4 para Java?
- 23. ¿Hay algo así como find_if en Java?
- 24. ¿Hay algo similar a WebClient.DownloadString en Java?
- 25. ¿Hay un equivalente .NET de Java Web Start?
- 26. ¿Hay un destructor de C++ equivalente en Java?
- 27. ¿Equivalente Java al getattr de python?
- 28. ¿Hay algo como malloc/free en java?
- 29. ¿Hay un equivalente de "Group Box" en Java Swing?
- 30. C# equivalente al charAt de Java()?
+1 La falta de genéricos es un inconveniente importante de las colecciones de los comunes. –
@ Anony-Mousse Sí; es un dolor, aunque todavía lo uso también:/ –
¡Esto es genial, gracias! – Zugwalt