Rubyの ".each"メソッドをJavaで実装するにはどうすればよいですか?

Rubyの .each のようなメソッドを実装して、配列やリストのようなクラスの繰り返し処理を簡単にする方法について、私はJavaに慣れていないのですか?

1
いくつかの実装がありますが、インターフェイスの実装を作成する必要があるため、すべてがかさばります。 Java 8が終了するまでは、本当に必要なものかどうかを評価する必要があります。あなたが多くの具体的なファンクタを構成するならば、彼らは理にかなっています。
追加された 著者 Dave Newton,

5 答え

標準のJavaで達成するのはやや面倒ですが、いくつかの人気のあるライブラリ(既に使用しているかもしれません)は、大量のコードを書くことを忘れる Predicate 少なくとも。素晴らしいことは、反復コードを記述する必要はありませんという徹底的にテストされた実績のあるヘルパークラスも提供していることです。

Google Guavaの Iterables をご覧ください。 class - filter() findIf() removeIf()などの操作を行うことができます。これらのメソッドを使用すると、非常に読みやすい結果が得られます。

Apacheのコモンズコレクションは、 CollectionUtils find() filter() select()などのメソッドはすべて述語になります。

Google Guavaはさらに進んで、述語ヘルパーを提供します。 isNull containsPattern などのような、 Predicate インスタンスのbase/Predicates.html "rel =" nofollow " isInstanceOf

あなたがこのようなもののために車輪を再発明することを避けたい場合は、それらをチェックしてください。

+1。実際にGuavaを調べる必要があります...
追加された 著者 Tony BenBrahim,

Rubyのように、JavaがRubyのようにブロックをパラメータとして受け入れないため、Rubyのように各関数を作成することはできません。インターフェイスを使用して匿名クラス定義を提供することもできますが、それはそれぞれの構造に対してJavaを使用するよりも複雑です。 Javaでそれぞれを行うには、次のようなことができます:

String[] myStrings = { "a", "b", "c" };

for (String str : myStrings) {
   //Do something with each String value.
    System.out.println(str);
}
1
追加された
完全に正直なところでは、ボイラープレートのコードはあまり大きくありません。冗長性の点で唯一の違いは、タイプを指定する必要があることです。
追加された 著者 Jon Newmuis,
OK。私はそれが可能ではないかもしれない感情を持っていた。私は本当に for ループの完全な構文を書かなくてはならないことに真剣に取り組んでいました。
追加された 著者 Mario Zigliotto,
うん、あなたは正しいです。 Javaを書くだけです。すべてのことがもっと冗長に見えます。私はこれを正しい答えとして選んでいます。なぜなら、これは最も普通のことですから。回答ありがとうございます。
追加された 著者 Mario Zigliotto,

Java 8まで、クロージャの不足のために醜いですが、ここにあります:

import java.util.Arrays;
import java.util.Collection;
import java.util.List;


public class EachTest {

    interface ItemProcessor{
        void process(T item);
    }

     static  void each(Collection collection, ItemProcessor processor){
        for (T item: collection){
            processor.process(item);
        }
    }

    public static void main(String[] args) {
        List list=Arrays.asList(new String("foo"),"bar");

        EachTest.each(list,new ItemProcessor() {
            @Override
            public void process(String item) {
                System.out.println(item);
            }
        });
    }

}

私はJava 8では、それは(それについて私を引用しないでください)と思う:

public static void main(String[] args) {
    List list=Arrays.asList(new String("foo"),"bar");
    EachTest.each(list,String item=>System.out.println(item));
}
1
追加された
私は先週、 => の代わりに - > になると思います。
追加された 著者 Jörg W Mittag,

イテレータを使用して実行できます。あなたは以下の特別なバージョンでそれを行うことができます:

ArrayList strings = ...;

for (String str : strings) {
    System.out.println(str);
}
0
追加された

コマンドパターンを考えてみましょう。

http://ja.wikipedia.org/wiki/Command_pattern#Java

0
追加された