2015-07-13 9 views
8

ich dies in C# tun kann:Java-Äquivalent von Where-Klausel in C# Linq

int CheetahNumber = 77; 
Animal Cheetah = Model.Animals 
    .Where(e => e.AnimalNo.Equals(CheetahNumber)) 
    .FirstOrDefault(); 

Zum Beispiel in Java I ArrayList<Animal> Animals

habe Wie kann ich abfragen, so eine Arraylist? Vielen Dank.

+1

Es gibt kein Äquivalent LINQ in Java, soweit ich weiß. –

+0

mögliches Duplikat von [ArrayList-Filter] (http://stackoverflow.com/questions/9146224/arraylist-filter) –

Antwort

19

Java 8 stellt die Stream API, die denen in Linq ähnliche Konstrukte können.

Ihre Anfrage zum Beispiel ausgedrückt werden könnte:

int cheetahNumber = 77; 

Animal cheetah = animals.stream() 
    .filter((animal) -> animal.getNumber() == cheetahNumber) 
    .findFirst() 
    .orElse(Animal.DEFAULT); 

Sie werden offensichtlich zum Training benötigen, wenn ein Standardwert vorhanden ist, die in diesem Fall scheint seltsam, aber ich habe es gezeigt, weil das ist, was der Code in deiner Frage tut es.

+0

Eine Frage: Kann ich das mit Android verwenden? – jason

+1

Die Stream-API wurde mit Java 8 eingeführt, das (zum Zeitpunkt des Schreibens) noch nicht unterstützt wird (siehe http://stackoverflow.com/questions/23318109/is-it-possible-to-use-java-8) -for-android-development) –

+0

Der Standardwert hier ist eigentlich 'null' - der Standard aller Klassen. Da C# Primitive als generische Typargumente (ohne Boxen !!) zulässt, weist der Name 'FirstOrDefault' darauf hin, dass Sie für Werttypen etwas neben null erhalten, wie für' int', '0' und für a' struct', eine Instanz dieser Struktur, die mit ihrem (parameterlosen) Standardkonstruktor erstellt wurde. Es sei denn, es handelt sich um einen Nullwerttyp. In diesem Fall erhalten Sie wieder den Wert "null", da dies tatsächlich der Klasse Nullable 'entspricht. – ErikE

2

Obwohl Java Ihnen keine LINQ-Konstrukte zur Verfügung stellt, können Sie eine bestimmte Ebene erreichen, die LINQ-Operationen mit Java 8 struktuieren.

wie ein

List<String> items = new ArrayList<String>(); 
items.add("one"); 
items.add("two"); 
items.add("three"); 

Stream<String> stream = items.stream(); 
stream.filter(item -> item.startsWith("o")); 

Werfen Sie einen Blick auf java8 stream

+0

Danke. Können Sie mir sagen, wie ich eine Eigenschaft eines Artikels erreichen kann, wenn Artikel Eigenschaften wie itemID, itemName usw. hat? – jason

+0

müssen Sie möglicherweise Getter Ihres Objekts verwenden – kuhajeyan

3

Sie können es mithilfe von Streams versuchen:

public String getFirstDog(List<Animal> animals) { 
    Animal defaultDog = new Dog(); 
    Animal animal = animalNames.stream(). //get a stream of all animals 
     filter((s) -> s.name.equals("Dog")).findFirst(). //Filter for dogs and find the first one 
     orElseGet(() -> defaultDog); //If no dog available return an default animal. 
             //You can omit this line. 
    return animal; 
}