有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!


共 (5) 个答案

  1. # 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);
    }
    
  2. # 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));
    }
    
  3. # 4 楼答案

    虽然在标准Java中实现这一点确实有点尴尬,但一些流行的库(您甚至可能已经在使用)提供了一个Predicate接口,至少可以节省大量的编写工作。最棒的是,它们还提供了经过彻底测试和验证的助手类,这意味着你不必编写迭代代码

    看看谷歌番石榴的Iterables类——你可以做filter()findIf()removeIf()之类的事情。如果使用得当,这些方法可以产生非常可读的结果

    Apache的Commons Collections在CollectionUtils中提供了类似的功能。像find()filter()select()这样的方法都是Predicate

    Google Guava还进一步提供了Predicates助手,它有whole load个罐装的Predicate实例,比如isNullcontainsPatternisInstanceOf

    如果你想避免为这些东西重新发明轮子,请查看它们

  4. # 5 楼答案

    您可以使用Iterator或使用以下特殊版本的:

    ArrayList<String> strings = ...;
    
    for (String str : strings) {
        System.out.println(str);
    }