2010-12-13 10 views
1

私はC#プログラミングの経験がありますが、私はJavaプロジェクトで何かを変更する必要がありますので、私の質問は、Javaの何かLINQ C#私はJavaでリストを照会する必要があります。Linq like for Java

+0

実際には同じではありません... "LINQ for Java tool"の質問は市場調査の多くです。 – CrazyDart

+0

LAMBDAJライブラリを使用します。 – Zasz

+1

これを確認してください:github.com/nicholas22/jpropel-light、実際の例:new String [] {"james"、 "john"、 "john"、 "eddie"} .where(startsWith( "j")) toList()。distinct(); –

答えて

0

LINQ for Javaのようなものはありません。ごめんなさい。グーグルで私はthis projectを見つけましたが、C#で得られる言語や構文砂糖に同じ統合を期待することはできません。

5

これは、実行する内容によって異なります。 C#のラムダ表記の概念は、匿名のクラスを使用することではるかに冗長に模倣することができます。だからFunction<T, bool>を取るWhereメソッドを作成することができます。Function<T1, TReturn>は1つのメソッド(たとえばExecute)を持つクラスです。私はグアバがこのようなものを持っていることを理解する。

アイデアはこのような何かを言う、その後に次のようになります。

Iterable<Ball> redBalls = Enumerable.Where(balls, 
    new Function<Ball, bool>() { 
     public bool Execute(Ball b) { return b.getColor() == Color.Red; } 
    }); 

をしかし、すべてこの作業のために、あなたにもLINQのSANSそれを行っているかもしれません:残念ながら、それははるかに

List<Ball> redBalls = new ArrayList<Ball>(); 
for(Ball ball in balls) { 
    if(ball.getColor() == Color.Red) {redBalls.add(ball);} 
} 

ですラムダ式、推論された型、プロパティ、および拡張メソッド(C#のやり方)を組み合わせるときにできることから泣いてください。

var redBalls = balls.Where(b => b.Color == Color.Red); 

このようなコードは、Javaは、バージョン7のために予定されていたラムダ式を実装したときにのみ可能になりますが、「次のバージョン」に押し戻されてしまいました。また、LINQ to SQLやLINQ to Entitiesのようなものは、ロードマップにもないと思うExpressionツリーがある場合にのみ可能です。

編集

一部の人々は、しかし、この動作をシミュレートするために、複雑なライブラリが出ています。多くの場合、クエリの一部を実行するために "マジック文字列"を使用し、コンパイラチェック値を提供できません。 LambdaJは、コンパイラを作るために、プロキシオブジェクトを使用して、あなたがこのような何かを探して、あなたはコンパイルのチェックとgetterメソッドとsetterメソッドを呼び出すことを可能にする、あなたのオブジェクトのいずれかで作業していると思います:

List<Person> redBalls = filter(having(
    on(Ball.class).getColor(), equalTo(Color.RED)), 
    balls); 

これらは非常に賢いです、この時点でLINQのシンプルさには本当に一致するものはありません。