如何在Java中实现Ruby的“.each”方法? 1 周,5 日 Questions & Answers 1442 我是Java新手,想知道如何实现Ruby的.each这样的方法来简化数组和列表等类的迭代
# 2 楼答案 你不能像Ruby那样对每个函数都做一个定义,因为Java不像Ruby那样接受块作为参数。您可以使用接口并提供匿名类定义,但这比只对每个构造使用Java要复杂得多。要在Java中实现每一项功能,可以执行以下操作: String[] myStrings = { "a", "b", "c" }; for (String str : myStrings) { // Do something with each String value. System.out.println(str); }
# 3 楼答案 在Java 8之前,由于缺少闭包,它变得很难看,但现在是: import java.util.Arrays; import java.util.Collection; import java.util.List; public class EachTest { interface ItemProcessor<T>{ void process(T item); } static <T> void each(Collection<T> collection, ItemProcessor<T> processor){ for (T item: collection){ processor.process(item); } } public static void main(String[] args) { List<String> list=Arrays.asList(new String("foo"),"bar"); EachTest.<String>each(list,new ItemProcessor<String>() { @Override public void process(String item) { System.out.println(item); } }); } } 我认为在Java8中,它将是(但不要引用我的话): public static void main(String[] args) { List<String> list=Arrays.asList(new String("foo"),"bar"); EachTest.<String>each(list,String item=>System.out.println(item)); }
# 4 楼答案 虽然在标准Java中实现这一点确实有点尴尬,但一些流行的库(您甚至可能已经在使用)提供了一个Predicate接口,至少可以节省大量的编写工作。最棒的是,它们还提供了经过彻底测试和验证的助手类,这意味着你不必编写迭代代码 看看谷歌番石榴的Iterables类——你可以做filter()、findIf()和removeIf()之类的事情。如果使用得当,这些方法可以产生非常可读的结果 Apache的Commons Collections在CollectionUtils中提供了类似的功能。像find()、filter()和select()这样的方法都是Predicate Google Guava还进一步提供了Predicates助手,它有whole load个罐装的Predicate实例,比如isNull、containsPattern和isInstanceOf 如果你想避免为这些东西重新发明轮子,请查看它们
# 5 楼答案 您可以使用Iterator或使用以下特殊版本的: ArrayList<String> strings = ...; for (String str : strings) { System.out.println(str); }
# 1 楼答案
考虑命令模式:
http://en.wikipedia.org/wiki/Command_pattern#Java
# 2 楼答案
你不能像Ruby那样对每个函数都做一个定义,因为Java不像Ruby那样接受块作为参数。您可以使用接口并提供匿名类定义,但这比只对每个构造使用Java要复杂得多。要在Java中实现每一项功能,可以执行以下操作:
# 3 楼答案
在Java 8之前,由于缺少闭包,它变得很难看,但现在是:
我认为在Java8中,它将是(但不要引用我的话):
# 4 楼答案
虽然在标准Java中实现这一点确实有点尴尬,但一些流行的库(您甚至可能已经在使用)提供了一个
Predicate
接口,至少可以节省大量的编写工作。最棒的是,它们还提供了经过彻底测试和验证的助手类,这意味着你不必编写迭代代码看看谷歌番石榴的Iterables类——你可以做
filter()
、findIf()
和removeIf()
之类的事情。如果使用得当,这些方法可以产生非常可读的结果Apache的Commons Collections在CollectionUtils中提供了类似的功能。像
find()
、filter()
和select()
这样的方法都是Predicate
Google Guava还进一步提供了
Predicates
助手,它有whole load个罐装的Predicate
实例,比如isNull
、containsPattern
和isInstanceOf
如果你想避免为这些东西重新发明轮子,请查看它们
# 5 楼答案
您可以使用Iterator或使用以下特殊版本的: