Tôi có một bộ sưu tập và tôi muốn biết nếu ít nhất một phần tử đáp ứng một số điều kiện. Về cơ bản, những gì some thực hiện trong JavaScript, tôi muốn thực hiện trên một bộ sưu tập!Java có tương đương với phương pháp "một số" của Javascript không?
Trả lời
Check-out Iterables
lớp Guava 's và any()
thực hiện.
Ít nhiều điều tương tự như ví dụ Commons Bộ sưu tập trong câu trả lời khác, nhưng 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 không tích hợp tính năng này. Javascript's some()
chấp nhận một con trỏ hàm làm đối số, không phải là một cái gì đó được hỗ trợ nguyên bản trong Java. Nhưng nó phải được khá thẳng về phía trước để mô phỏng các chức năng của some()
trong Java bằng cách sử dụng một vòng lặp và và một giao diện cho các chức năng gọi lại.
Bạn có thể sử dụng CollectionUtils
từ Apache commons-collections:
List<Integer> primes = Arrays.asList(3, 5, 7, 11, 13)
CollectionUtils.exists(primes, even); //false
đâu even
là một vị từ:
Predicate even = new Predicate() {
public boolean evaluate(Object object) {
return ((Integer)object) % 2 == 0;
}
}
Hoặc trong một phiên bản inlined:
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;
}
});
Vâng, nó là xấu xí cho hai lý do:
- Java chưa hỗ trợ chức năng như công dân hạng nhất, được mô phỏng bằng giao diện Single-Abstract-Method.
commons-collections
không hỗ trợ Generics.
Mặt khác bằng các ngôn ngữ JVM hiện đại như Scala bạn có thể viết:
List(3,5,7,11,13,17).exists(_ % 2 == 0)
Một thư viện của bên thứ ba để hỗ trợ phương pháp này là Google ổi, nó có [ 'Iterables.any () '] (http://guava-libraries.googlecode.com/svn/tags/release08/javadoc/com/google/common/collect/Iterables.html). – axtavt
Và ổi hỗ trợ Generics. ;) –
Java 8 sẽ có lambdas. Ngoài ra, các lớp SAM bây giờ được gọi là các giao diện chức năng. –
- 1. jQuery tương đương với phương pháp addEventListener JavaScript của
- 2. Java tương đương với String.match JavaScript của()
- 3. Có phương pháp tương đương LINQ không?
- 4. Có gì tương đương với Thread.sleep() của Java trong JavaScript?
- 5. Có tương đương với Ruby cho Function.prototype.bind của JavaScript không?
- 6. Có một Ruby tương đương với Wicket của Java không?
- 7. C# tương đương với Arrays.fill Java() phương pháp
- 8. Có tương đương với phương thức Java bằng C++ không?
- 9. Có Java tương đương với libevent không?
- 10. Tương đương với System.out.println() của Java trong Javascript là gì?
- 11. Có tương đương Java của SignalR không?
- 12. C# tương đương với charAt của Java()?
- 13. Có tương đương C++ với BigDecimal của Java không?
- 14. Tương đương TreeSet của Java tương đương với Python?
- 15. Có tương đương C# với CountDownLatch của Java không?
- 16. C# có tương đương với mã encodeURIComponent của JavaScript() không?
- 17. JavaScript của tương đương với __get PHP() phương pháp kỳ diệu
- 18. Javascript tương đương với urldecode của php()
- 19. Tương đương java với String.fromCharCode của javascript là gì?
- 20. có Java tương đương với defaultdict của Python không?
- 21. Có tương đương với php.net cho JavaScript không?
- 22. Có một .NET tương đương với Java Web Start không?
- 23. Có tương đương với phương pháp toDataURL của canvas cho SVG không?
- 24. IntelliJ có tương đương với "chế độ xem phương pháp" của Eclipse không?
- 25. Có javascript tương đương với phương thức __getattr__ của python không?
- 26. Javascript tương đương với strtotime của php()?
- 27. Có một bản đồ Java keySet() tương đương với bản đồ std :: của C++ không?
- 28. Java tương đương với OpenLayers
- 29. Java tương đương với preg_replace_callback của PHP
- 30. Có tương đương Javascript của andand của Ruby không?
+1 Việc thiếu generics là một nhược điểm chính của bộ sưu tập commons. –
@ Anony-Mousse Yeah; đó là một nỗi đau, mặc dù tôi vẫn sử dụng nó:/ –
Điều này thật tuyệt vời, cảm ơn! – Zugwalt