@craastad Jako facet .NET, który najbardziej utknął w świecie Java, odczuwam twój ból. Powinieneś jednak wypróbować Scalę - funkcje / zamknięcia pierwszej klasy, dla zrozumienia (nie takie same jak składnia zapytań LINQ, ale przydatne w wielu takich samych sytuacjach), ujednolicony system typów, wnioskowanie typów, kilka wygodnych obejść dla ogólnego usuwania typów ... wszystkie działają na JVM, współpracując z Javą. Plus kilka innych dobroci funkcjonalnych, takich jak dopasowywanie wzorów, typ Opcji itp.
Tim Goodman
Odpowiedzi:
808
Nie ma nic takiego jak LINQ dla Java.
...
Edytować
Teraz, gdy w Javie 8 wprowadzono nas do Stream Stream , jest to podobna sprawa w przypadku kolekcji, ale nie jest to dokładnie to samo, co Linq.
Jeśli szukasz ORM, takiego jak Entity Framework, możesz wypróbować Hibernację
czy jest coś w planie? zintegrowany z językiem? CZY to numer JCP? itp. itd.
Cheeso
6
Bardzo prawda, chociaż duża część tego, co sprawia, że LINQ jest tak przyjemna, to jak głęboko jest zintegrowana z językiem i kompilatorem
AgileJon
11
Niestety, „bardzo prawdziwa” była przeznaczona dla 280Z28. Nie wiem, czy jest na to JCP. LINQ wymagało kilku zmian w języku C #, biorąc pod uwagę szybkość, z jaką działa JCP, nie wstrzymałbym oddechu.
LINQ jest specyfikacją, a nie implementacją ... Wyrażenia lambda są częścią LINQ. Wszystkie projekty próbujące przenieść LINQ na Javę są implementacjami dla konkretnego scenariusza (SQL, Objects ...), ale nie odpowiadają głównemu celowi LINQ: Zintegrowanie zapytania językowego w kodzie. Z tego powodu nie ma prawdziwej alternatywy ani inicjatywy, która na razie mogłaby być uważana za alternatywę.
Coolection nie udaje, że jest nową lambda, jednak jesteśmy otoczeni starymi starszymi projektami Java, w których ta biblioteka pomoże. Jest naprawdę prosty w użyciu i rozszerzany, obejmując tylko najczęściej używane akcje iteracji nad kolekcjami, takie jak:
Ciąg dla nazwy kolumny, co oznacza, że kompilator i autouzupełnianie IDE nie pomogą w literówkach, a refaktoryzacja jest trudna. Jakieś plany to zmienić?
Ekevoo
2
Cześć, Ekevoo. Myślę, że będzie okropnie i kiedyś próbowałem to zrobić. Ale w tej chwili, w Javie 8, Coollection jest przestarzałą biblioteką. Może przydaje się w najstarszych projektach ... Co sądzisz?
19WAS85
1
@WagnerAndrade Ostatnie zatwierdzenie to 5-6 lat temu. Zakładam, że funkcjonalność została w dużej mierze zastąpiona przez Javę 8? Również bardzo fajna nazwa :)
Zapoznaj się z artykułami Briana Goetza dotyczącymi lambd, aby dobrze zrozumieć, w jaki sposób lambd są implementowane w JDK8, a także zrozumieć strumienie, wewnętrzną iterację, zwarcie i odniesienia do konstruktorów. Sprawdź także JSR powyżej, aby uzyskać dalsze przykłady .
Czy lambda nie były również zaplanowane w Javie 7? Co się z tym stało?
BlueRaja - Danny Pflughoeft 11.10.11
7
Oracle kupił Sun (język w policzek). Java 7 trwała zdecydowanie za długo (5 lat), więc lambdas nie trafił na krótką listę, co było dość rozczarowujące dla mas. Biorąc to pod uwagę, Oracle wygląda na to, że podnosi piłkę i myślę, że planujemy na Javę 8 października przyszłego roku.
Brett Ryan,
1
Należy zauważyć, że stan Lambda został ponownie zaktualizowany, co obejmuje teraz strumienie, wewnętrzną iterację, zwarcie i odniesienia do konstruktorów. Radzę wszystkim przeczytać nowy dokument.
Brett Ryan
6
Wyrażenia lambda są małą częścią LINQ.
sesispla
4
@NeWNeO, jeśli odwołujesz się do języka zapytań w C #, to tak, nic takiego nie pojawia się w Javie, jednak z mojego doświadczenia wynika, że najbardziej doświadczeni programiści C # wolą składnię lambda niż język zapytań. Jeśli jednak na przykład odwołujesz się do LINQ-to-Entities, przekonasz się, że lambda w java umożliwi to i wiele więcej. Aby włączyć tę funkcję, jest wiele innych możliwości, takich jak metody obrońcy .
Brett Ryan
119
Możesz wybierać elementy z kolekcji (i wiele więcej) w bardziej czytelny sposób, korzystając z biblioteki lambdaj
Ma pewne zalety w stosunku do biblioteki Quaere, ponieważ nie używa żadnego magicznego ciągu, jest całkowicie bezpieczny dla typów i moim zdaniem oferuje bardziej czytelny DSL.
To miłe, ale daleko mu do budowania zapytania i wykonywania go ponownie sql, xml, collection itp.
bytebender
dlaczego mogę otrzymywać java.lang.ExceptionInInitializerError podczas korzystania z lambdaj select w klasie niestandardowej w moim projekcie na Androida?
topwik,
1
+1 to jest naprawdę dobre dla tych z nas, którzy nie dbają o SQL / XML i chcą jedynie łatwiejszego dostępu do kolekcji.
ashes999
101
Nie znajdziesz odpowiednika LINQ, chyba że użyjesz javacc do stworzenia własnego odpowiednika.
Do tego dnia, gdy ktoś znajdzie realny sposób, istnieje kilka dobrych alternatyw, takich jak
github.com/TrigerSoft/jaque znalazł ten sposób i pozwala tworzyć drzewa wyrażeń. W połączeniu z Java 8 Lambdas, dowolną pojemność LINQ można wdrożyć z takim samym wysiłkiem jak w .Net.
LINQ do SQL / NHibernate / itp. (zapytania do bazy danych) - Jedną z opcji byłoby użycie JINQ, który również korzysta z nowych funkcji JAVA 8 i został wydany 26 lutego 2014 roku na Github: https://github.com/my2iu/Jinq
Jinq zapewnia programistom łatwy i naturalny sposób pisania zapytań do baz danych w Javie. Dane bazy danych można traktować jak normalne obiekty Java przechowywane w kolekcjach. Możesz iterować nad nimi i filtrować je przy użyciu normalnych poleceń Java, a cały kod zostanie automatycznie przetłumaczony na zoptymalizowane zapytania do bazy danych. Wreszcie, zapytania w stylu LINQ są dostępne dla Java!
Nie jestem pewien, dlaczego czytelnicy nie zwrócili uwagi na twoją odpowiedź, mimo że Stream API jest najbliższy LINQ!
Rafid
3
Interfejs API Streams to zły żart w porównaniu do LINQ.
Andrei Rînea
1
Przepraszam stary, nie chcę być niegrzeczny. Szukałem ekwiwalentu LINQ po tym, jak oderwałem głowę od API strumieniowego. chciałem tylko powiedzieć, że to nie jest prawdziwy odpowiednik, to wszystko.
Andrei Rînea,
1
@ AndreiRînea Czy szukasz dostawców LINQ (LINQ do XML, LINQ do JSON, LINQ do NHibernate itp.) Równoważnych funkcji?
Răzvan Flavius Panda
2
Wszystko, czego potrzebowałem, to środki do grupowania i max w kolekcji. W końcu udało mi się, ale z dużym wysiłkiem i zbyt dużym kodem.
Teraz, gdy Java 8 obsługuje lambdy, możliwe jest tworzenie interfejsów API Java, które bardzo przypominają LINQ.
Jinq jest jedną z tych nowych bibliotek w stylu LINQ dla Java.
Jestem programistą tej biblioteki. Opiera się na pięciu latach badań nad wykorzystaniem analizy kodu bajtowego do tłumaczenia zapytań Java na bazy danych. Podobnie jak D-LINQ w C # jest warstwą zapytania, która znajduje się na frameworku Entity Framework, Jinq może działać jako warstwa zapytania oparta na JPA lub jOOQ. Obsługuje agregację, grupy i podkwerendy. Nawet Erik Meijer (twórca LINQ) uznał Jinq .
Zobacz SBQL4J . Jest to silny język zapytań bezpieczny dla typu zintegrowany z Javą. Pozwala pisać skomplikowane i wielokrotnie zagnieżdżone zapytania. Istnieje wiele operatorów, metody Java mogą być wywoływane wewnątrz zapytań, takich jak konstruktory. Zapytania są tłumaczone na czysty kod Java (nie ma refleksji w czasie wykonywania), więc wykonanie jest bardzo szybkie.
EDYCJA: Cóż, jak dotąd SBQL4J jest JEDYNYM rozszerzeniem języka Java, które daje możliwości zapytania podobne do LINQ. Istnieje kilka interesujących projektów, takich jak Quaere i JaQue, ale są one tylko interfejsem API, a nie rozszerzeniem składni / semantyki z silnym bezpieczeństwem typów w czasie kompilacji.
Czy mogę używać JaQue do odczytu / zapisu plików XML w taki sam sposób, jak w LINQ?
Khurram Majeed
7
Próbowałem bibliotek guava z google. Ma taki, FluentIterablektóry moim zdaniem jest zbliżony do LINQ. Zobacz także FunctionalExplained .
List<String> parts =newArrayList<String>();// add parts to the collection. FluentIterable<Integer> partsStartingA =FluentIterable.from(parts).filter(newPredicate<String>(){@Overridepublicboolean apply(finalString input){return input.startsWith("a");}}).transform(newFunction<String,Integer>(){@OverridepublicInteger apply(finalString input){return input.length();}});
Wydaje się być obszerną biblioteką dla Java. Z pewnością nie tak zwięzły jak LINQ, ale wygląda interesująco.
Możesz wypróbować moją bibliotekę CollectionsQuery . Pozwala na uruchamianie zapytań LINQ na kolekcje obiektów. Musisz przekazać predykat, tak jak w LINQ. Jeśli używasz java6 / 7, musisz użyć starej składni z interfejsami:
Jeśli potrzebujesz uruchamiać zapytania DB, możesz spojrzeć na JINQ, jak wspomniano powyżej, ale RetroLambda nie może go cofnąć, skorzystaj z serializowanych lambd.
Wygląda na to, że Linq, o którym wszyscy tutaj mówią, to tylko LinqToObjects. Które, jak wierzę, oferuje tylko funkcjonalność, którą można już dziś osiągnąć w Javie, ale z naprawdę brzydką składnią.
To, co widzę jako prawdziwą potęgę Linq w .Net, polega na tym, że wyrażeń lambda można używać w kontekście wymagającym Delegata lub Wyrażenia, a następnie zostaną one skompilowane do odpowiedniej formy. To pozwala na działanie takich rzeczy jak LinqToSql (lub cokolwiek innego niż LinqToObjects) i pozwala im mieć składnię identyczną jak LinqToObjects.
Wygląda na to, że wszystkie wyżej wymienione projekty oferują jedynie możliwości LinqToObjects. Co sprawia, że myślę, że funkcjonalność typu LinqToSql nie jest na horyzoncie dla Java.
W przypadku podstawowych kolekcji funkcjonalnych Java 8 ma wbudowane oprogramowanie, większość głównych języków JVM innych niż Java ma wbudowane (Scala, Clojure itp.). Możesz także dodać biblioteki lib dla wcześniejszych wersji Java.
Aby uzyskać pełny zintegrowany dostęp do bazy danych SQL, Scala (działa na JVM) ma Slick
W przypadku LINQ (LINQ to Objects) Java 8 będzie miała coś równoważnego, zobacz Project Lambda .
Ma przeliczalny jest LINQ to Objects rozszerzeniami takimi jak spożywczych . Ale w przypadku bardziej skomplikowanych rzeczy LINQ, takich jak Expression i ExpressionTree (są one potrzebne dla LINQ na SQL i innych dostawców LINQ, jeśli chcą dostarczyć coś zoptymalizowanego i rzeczywistego), nie ma jeszcze odpowiednika, ale może zobaczymy to w przyszłości :)
Ale nie sądzę, że w przyszłości będą istniały zapytania deklaratywne na Javie.
W Javie nie ma takiej funkcji. Korzystając z innego interfejsu API, uzyskasz tę funkcję. Załóżmy, że mamy Obiekt zwierzęcy zawierający nazwę i identyfikator. Mamy obiekt listy mający obiekty zwierzęce. Teraz, jeśli chcemy uzyskać wszystkie nazwy zwierząt, które zawierają „o” z obiektu listy. możemy napisać następujące zapytanie
Być może nie jest to odpowiedź, na którą liczysz, ale jeśli jakaś część twojego kodu wymaga ciężkiej pracy nad kolekcjami (wyszukiwanie, sortowanie, filtrowanie, transformacje, analiza), możesz wziąć pod uwagę napisanie niektórych klas w Clojure lub Scali .
Ze względu na ich funkcjonalny charakter najlepsza jest praca z kolekcjami. Nie mam dużego doświadczenia ze Scalą, ale dzięki Clojure prawdopodobnie znajdziesz na wyciągnięcie ręki mocniejszego Linqa, a po skompilowaniu klasy, które stworzysz, będą bezproblemowo integrować się z resztą bazy kodu.
Diting to biblioteka klas zapewniająca możliwości zapytań w kolekcjach za pomocą metod łańcuchowych i anonimowego interfejsu, takiego jak Linq w .NET. W przeciwieństwie do większości innych bibliotek kolekcji, które używają metod statycznych, wymagają iteracji całej kolekcji, Diting zapewnia podstawową klasę Enumerable, która zawiera odroczone łańcuchowe metody implementacji kwerendy na zbiorze lub tablicy.
Scala.Teraz przeczytałem go i znalazłem jak linq, ale prostszy i bardziej nieczytelny. ale Scala może działać w systemie Linux, tak? csharp potrzebuje mono.
Scala potrzebuje środowiska wykonawczego Java do uruchomienia: niekoniecznie będzie działać na samej instalacji Linuksa, w zależności od instalowanych komponentów.
Rup
@Rup jest w pełni zgodny JRE dla GNU / Linux, a Mono nie jest w pełni zgodną implementacją .NET.
Nazwa wyświetlana
@Sarge Nie o to mi chodziło, ale Mono uruchamia LINQ wystarczająco dobrze, prawda? Poza tym istnieje teraz własna platforma Microsoft .Net Core dla systemu Linux .
Rup,
(GNU /) Linux nie jest jedyną platformą oprócz Windows, a JRE istnieje dla wielu różnych platform. Mono nie w pełni implementuje wszystko, na przykład nie ma WPF.
Nazwa wyświetlana
0
Był język programowania Pizza (rozszerzenie Java) i powinieneś go zobaczyć. - Wykorzystuje koncepcję „płynnych interfejsów” do kwerendowania danych w sposób deklaratywny i zasadniczo jest identyczny z wyrażeniami zapytań LINQ (http://en.wikipedia.org/wiki/Pizza_programming_language). Ale niestety nie było to ścigane, ale byłby to jeden ze sposobów, aby uzyskać coś podobnego do LINQ w Javie.
Pewnie, że było to ścigane, ale nie pod nazwą „Pizza”. Generyczne z Pizza zostały połączone w GJ, który następnie stał się kompilatorem referencyjnym Java 1.3 (chociaż generyczne były ukryte pod flagą do 1.5). W międzyczasie ... resztą pomysłów i kilkoma dodatkowymi stało się Scala.
Kevin Wright
Dzięki za te informacje, oczywiście Scala jest tutaj dobrym punktem. Ale te umiejętności nie zostały zintegrowane z językiem Java. Możesz użyć języka Scala, aby zaimplementować ładny kod zapytania i użyć wynikowego pliku binarnego z Javy.
Odpowiedzi:
Nie ma nic takiego jak LINQ dla Java.
...
Edytować
Teraz, gdy w Javie 8 wprowadzono nas do Stream Stream , jest to podobna sprawa w przypadku kolekcji, ale nie jest to dokładnie to samo, co Linq.
Jeśli szukasz ORM, takiego jak Entity Framework, możesz wypróbować Hibernację
:-)
źródło
Istnieje alternatywne rozwiązanie, Coollection .
Coolection nie udaje, że jest nową lambda, jednak jesteśmy otoczeni starymi starszymi projektami Java, w których ta biblioteka pomoże. Jest naprawdę prosty w użyciu i rozszerzany, obejmując tylko najczęściej używane akcje iteracji nad kolekcjami, takie jak:
źródło
Lambdas są teraz dostępne w Javie 8 w postaci JSR-335 - wyrażenia lambda dla języka programowania JavaTM
AKTUALIZACJA : JDK8 został wydany i zawiera projekt lambda. Warto pobrać kopię Java 8 w akcji, która wciąż jest MEAP.
Zapoznaj się z artykułami Briana Goetza dotyczącymi lambd, aby dobrze zrozumieć, w jaki sposób lambd są implementowane w JDK8, a także zrozumieć strumienie, wewnętrzną iterację, zwarcie i odniesienia do konstruktorów. Sprawdź także JSR powyżej, aby uzyskać dalsze przykłady .
Napisałem bloga o niektórych zaletach używania lambd w JDK8 o nazwie The Power of the Arrow , również NetBeans 8 ma świetne wsparcie dla konwersji konstruktów do JDK8, o którym również pisałem na blogu o migracji do JDK 8 za pomocą NetBeans .
źródło
Możesz wybierać elementy z kolekcji (i wiele więcej) w bardziej czytelny sposób, korzystając z biblioteki lambdaj
https://code.google.com/archive/p/lambdaj/
Ma pewne zalety w stosunku do biblioteki Quaere, ponieważ nie używa żadnego magicznego ciągu, jest całkowicie bezpieczny dla typów i moim zdaniem oferuje bardziej czytelny DSL.
źródło
Nie znajdziesz odpowiednika LINQ, chyba że użyjesz javacc do stworzenia własnego odpowiednika.
Do tego dnia, gdy ktoś znajdzie realny sposób, istnieje kilka dobrych alternatyw, takich jak
źródło
LINQ do Objects - JAVA 8 dodał API Stream, który dodaje obsługę funkcjonalnych operacji na strumieniach wartości:
Pakiet java.util.stream
Wyjaśnienie Java 8: Stosowanie Lambdas do kolekcji Java
LINQ do SQL / NHibernate / itp. (zapytania do bazy danych) - Jedną z opcji byłoby użycie JINQ, który również korzysta z nowych funkcji JAVA 8 i został wydany 26 lutego 2014 roku na Github: https://github.com/my2iu/Jinq
Strona projektu JINQ: http://www.jinq.org/
źródło
Istnieje projekt o nazwie quaere .
Jest to framework Java, który dodaje możliwość zapytania do kolekcji.
Uwaga: Według autora projekt nie jest już utrzymywany.
źródło
from x in xs select x
i znaleźć odpowiedź (nie).Istnieje wiele odpowiedników LINQ dla Java, zobacz tutaj dla porównania.
W przypadku bezpiecznej dla stylu struktury Quaere / LINQ rozważ użycie Querydsl . Querydsl obsługuje kolekcje JPA / Hibernate, JDO, SQL i Java.
Jestem opiekunem Querydsl, więc ta odpowiedź jest stronnicza.
źródło
możesz użyć scala, ma podobną składnię i jest prawdopodobnie bardziej wydajny niż linq.
źródło
Podobnie jak w 2014 roku, mogę wreszcie powiedzieć, że LINQ jest już dostępny w Javie 8, więc nie muszę już szukać alternatywy dla LINQ.
źródło
Teraz, gdy Java 8 obsługuje lambdy, możliwe jest tworzenie interfejsów API Java, które bardzo przypominają LINQ.
Jinq jest jedną z tych nowych bibliotek w stylu LINQ dla Java.
Jestem programistą tej biblioteki. Opiera się na pięciu latach badań nad wykorzystaniem analizy kodu bajtowego do tłumaczenia zapytań Java na bazy danych. Podobnie jak D-LINQ w C # jest warstwą zapytania, która znajduje się na frameworku Entity Framework, Jinq może działać jako warstwa zapytania oparta na JPA lub jOOQ. Obsługuje agregację, grupy i podkwerendy. Nawet Erik Meijer (twórca LINQ) uznał Jinq .
źródło
Zobacz SBQL4J . Jest to silny język zapytań bezpieczny dla typu zintegrowany z Javą. Pozwala pisać skomplikowane i wielokrotnie zagnieżdżone zapytania. Istnieje wiele operatorów, metody Java mogą być wywoływane wewnątrz zapytań, takich jak konstruktory. Zapytania są tłumaczone na czysty kod Java (nie ma refleksji w czasie wykonywania), więc wykonanie jest bardzo szybkie.
EDYCJA: Cóż, jak dotąd SBQL4J jest JEDYNYM rozszerzeniem języka Java, które daje możliwości zapytania podobne do LINQ. Istnieje kilka interesujących projektów, takich jak Quaere i JaQue, ale są one tylko interfejsem API, a nie rozszerzeniem składni / semantyki z silnym bezpieczeństwem typów w czasie kompilacji.
źródło
Implementacja Java LINQ do SQL . Zapewnia pełną integrację językową i większy zestaw funkcji w porównaniu do .NET LINQ.
źródło
Próbowałem bibliotek guava z google. Ma taki,
FluentIterable
który moim zdaniem jest zbliżony do LINQ. Zobacz także FunctionalExplained .Wydaje się być obszerną biblioteką dla Java. Z pewnością nie tak zwięzły jak LINQ, ale wygląda interesująco.
źródło
https://code.google.com/p/joquery/
Obsługuje różne możliwości,
Biorąc pod uwagę kolekcję,
typu
Filtr
Java 7
Java 8
Również,
Sortowanie (dostępne również dla Java 7)
Grupowanie (dostępne również dla Java 7)
Połączenia (dostępne również dla Java 7)
Dany,
Można dołączyć,
Wyrażenia
źródło
Możesz wypróbować moją bibliotekę CollectionsQuery . Pozwala na uruchamianie zapytań LINQ na kolekcje obiektów. Musisz przekazać predykat, tak jak w LINQ. Jeśli używasz java6 / 7, musisz użyć starej składni z interfejsami:
Możesz także użyć go w Javie 8 lub w starej Javie z RetroLambda i wtyczką gradle , wtedy będziesz mieć nową fantazyjną składnię:
Jeśli potrzebujesz uruchamiać zapytania DB, możesz spojrzeć na JINQ, jak wspomniano powyżej, ale RetroLambda nie może go cofnąć, skorzystaj z serializowanych lambd.
źródło
Aby dodać kolejną alternatywę: Java 6 ma rozwiązanie dla bezpiecznych zapytań do bazy danych przy użyciu pakietu javax.persistence.criteria .
Chociaż muszę powiedzieć, że tak naprawdę nie jest to LINQ, ponieważ za pomocą LINQ można wyszukiwać dowolne IEnumerable.
źródło
Istnieje bardzo dobra biblioteka, której możesz użyć do tego.
Znajduje się tutaj: https://github.com/nicholas22/jpropel-light
Jednak Lambdas będzie dostępny dopiero w Javie 8, więc używanie go jest nieco inne i nie wydaje się tak naturalne.
źródło
Wygląda na to, że Linq, o którym wszyscy tutaj mówią, to tylko LinqToObjects. Które, jak wierzę, oferuje tylko funkcjonalność, którą można już dziś osiągnąć w Javie, ale z naprawdę brzydką składnią.
To, co widzę jako prawdziwą potęgę Linq w .Net, polega na tym, że wyrażeń lambda można używać w kontekście wymagającym Delegata lub Wyrażenia, a następnie zostaną one skompilowane do odpowiedniej formy. To pozwala na działanie takich rzeczy jak LinqToSql (lub cokolwiek innego niż LinqToObjects) i pozwala im mieć składnię identyczną jak LinqToObjects.
Wygląda na to, że wszystkie wyżej wymienione projekty oferują jedynie możliwości LinqToObjects. Co sprawia, że myślę, że funkcjonalność typu LinqToSql nie jest na horyzoncie dla Java.
źródło
W przypadku podstawowych kolekcji funkcjonalnych Java 8 ma wbudowane oprogramowanie, większość głównych języków JVM innych niż Java ma wbudowane (Scala, Clojure itp.). Możesz także dodać biblioteki lib dla wcześniejszych wersji Java.
Aby uzyskać pełny zintegrowany dostęp do bazy danych SQL, Scala (działa na JVM) ma Slick
źródło
W przypadku LINQ (LINQ to Objects) Java 8 będzie miała coś równoważnego, zobacz Project Lambda .
Ma przeliczalny jest LINQ to Objects rozszerzeniami takimi jak spożywczych . Ale w przypadku bardziej skomplikowanych rzeczy LINQ, takich jak Expression i ExpressionTree (są one potrzebne dla LINQ na SQL i innych dostawców LINQ, jeśli chcą dostarczyć coś zoptymalizowanego i rzeczywistego), nie ma jeszcze odpowiednika, ale może zobaczymy to w przyszłości :)
Ale nie sądzę, że w przyszłości będą istniały zapytania deklaratywne na Javie.
źródło
W Javie nie ma takiej funkcji. Korzystając z innego interfejsu API, uzyskasz tę funkcję. Załóżmy, że mamy Obiekt zwierzęcy zawierający nazwę i identyfikator. Mamy obiekt listy mający obiekty zwierzęce. Teraz, jeśli chcemy uzyskać wszystkie nazwy zwierząt, które zawierają „o” z obiektu listy. możemy napisać następujące zapytanie
from(animals).where("getName", contains("o")).all();
W powyższym zapytaniu wyszczególnione zostaną zwierzęta zawierające alfabet „o” w nazwie. Więcej informacji można znaleźć na poniższym blogu. http://javaworldwide.blogspot.in/2012/09/linq-in-java.html
źródło
Sprawdź małe-q . (Pamiętaj, że obecnie nie możesz go pobrać).
Oto przykład dostosowany powyższy link:
źródło
JaQu jest odpowiednikiem LINQ dla Java. Chociaż został opracowany dla bazy danych H2, powinien działać dla każdej bazy danych, ponieważ używa JDBC.
źródło
Być może nie jest to odpowiedź, na którą liczysz, ale jeśli jakaś część twojego kodu wymaga ciężkiej pracy nad kolekcjami (wyszukiwanie, sortowanie, filtrowanie, transformacje, analiza), możesz wziąć pod uwagę napisanie niektórych klas w Clojure lub Scali .
Ze względu na ich funkcjonalny charakter najlepsza jest praca z kolekcjami. Nie mam dużego doświadczenia ze Scalą, ale dzięki Clojure prawdopodobnie znajdziesz na wyciągnięcie ręki mocniejszego Linqa, a po skompilowaniu klasy, które stworzysz, będą bezproblemowo integrować się z resztą bazy kodu.
źródło
Anonimowy użytkownik wspomniał o innym, Diting :
źródło
Scala.Teraz przeczytałem go i znalazłem jak linq, ale prostszy i bardziej nieczytelny. ale Scala może działać w systemie Linux, tak? csharp potrzebuje mono.
źródło
Był język programowania Pizza (rozszerzenie Java) i powinieneś go zobaczyć. - Wykorzystuje koncepcję „płynnych interfejsów” do kwerendowania danych w sposób deklaratywny i zasadniczo jest identyczny z wyrażeniami zapytań LINQ (http://en.wikipedia.org/wiki/Pizza_programming_language). Ale niestety nie było to ścigane, ale byłby to jeden ze sposobów, aby uzyskać coś podobnego do LINQ w Javie.
źródło
Nie ma odpowiednika LINQ dla Java. Ale istnieje część zewnętrznego API, który wygląda jak LINQ, taki jak https://github.com/nicholas22/jpropel-light , https://code.google.com/p/jaque/
źródło
możesz wypróbować tę bibliotekę: https://code.google.com/p/qood/
Oto kilka powodów, aby z niego korzystać:
źródło