@craastad En tant que gars .NET maintenant principalement coincé dans le monde Java, je ressens votre douleur. Vous devriez essayer Scala - fonctions / fermetures de première classe, pour les compréhensions (pas la même que la syntaxe de requête de LINQ, mais utile dans de nombreuses situations identiques), un système de type unifié, l'inférence de type, quelques solutions de contournement pratiques pour l'effacement de type générique ... tous fonctionnant sur la JVM, interopérant avec Java. Plus un tas d'autres qualités fonctionnelles comme la correspondance de motifs, le type d'option, etc.
Tim Goodman
Réponses:
808
Il n'y a rien de tel que LINQ pour Java.
...
Éditer
Maintenant, avec Java 8, nous sommes initiés à l' API Stream , c'est un genre similaire quand il s'agit de collections, mais ce n'est pas tout à fait la même chose que Linq.
Si c'est un ORM que vous recherchez, comme Entity Framework, vous pouvez essayer Hibernate
y a-t-il quelque chose dans le plan? intégré dans la langue? Y a-t-il un numéro JCP? etc etc.
Cheeso
6
Très vrai, bien qu'une grande partie de ce qui rend LINQ si agréable soit la profondeur de son intégration dans le langage et le compilateur
AgileJon
11
Désolé, le «très vrai» était destiné à 280Z28. Je ne sais pas s'il existe un JCP pour cela. LINQ a nécessité plusieurs modifications du langage C #, étant donné la vitesse à laquelle JCP fonctionne, je ne retenais pas mon souffle.
LINQ est une spécification, pas une implémentation ... Les expressions Lambda font partie de LINQ. Tous les projets essayant de porter LINQ vers Java sont des implémentations pour un scénario concret (SQL, Objects ...) mais ne couvrent pas l'objectif principal de LINQ: intégrer la requête de langage dans le code. Pour cette raison, il n'y a pas de véritable alternative ni initiatique, pour l'instant, qui peut être considérée comme une alternative.
Coolection n'a pas prétendu être le nouveau lambda, mais nous sommes entourés d'anciens projets Java hérités où cette bibliothèque vous aidera. C'est vraiment simple à utiliser et à étendre, ne couvrant que les actions d'itération les plus utilisées sur les collections, comme ça:
Chaîne pour le nom de la colonne, ce qui signifie que le compilateur et la saisie semi-automatique IDE ne seront pas utiles contre les fautes de frappe et la refactorisation est difficile. Avez-vous l'intention de changer cela?
Ekevoo
2
Salut, Ekevoo. Je pense que ce sera génial et j'ai essayé de le faire un jour. Mais en ce moment, avec Java 8, la Coollection est une bibliothèque obsolète. C'est peut-être utile pour les projets les plus anciens ... Que pensez-vous?
19WAS85
1
@WagnerAndrade Le dernier commit date de 5-6 ans. Je suppose que la fonctionnalité a été largement remplacée par Java 8? Aussi, nom très cool :)
Lisez les articles de Brian Goetz relatifs aux lambdas pour une compréhension décente de la façon dont les lambdas sont implémentés dans JDK8 tout en acquérant une compréhension des flux, des itérations internes, des courts-circuits et des références de constructeur. Consultez également les JSR ci-dessus pour obtenir d'autres exemples. .
J'ai écrit un blog sur certains des avantages de l'utilisation de lambdas dans JDK8 appelé The Power of the Arrow , également NetBeans 8 a un excellent support pour convertir des constructions en JDK8 que j'ai également blogué sur la migration vers JDK 8 avec NetBeans .
Les lambdas n'étaient-ils pas également prévus pour Java 7? Qu'est-il arrivé à ça?
BlueRaja - Danny Pflughoeft
7
Oracle a acheté Sun (ironique). Java 7 prenait beaucoup trop de temps (5 ans), donc lambdas a raté la liste restreinte, ce qui a été plutôt décevant pour les masses. Cela étant dit, Oracle semble ramasser le ballon et je pense que nous sommes programmés pour Java le 8 octobre de l'année prochaine.
Brett Ryan
1
Notez que l' état de Lambda a été mis à jour une fois de plus, ce qui couvre désormais les flux, l'itération interne, les courts-circuits et les références de constructeur. Je vous conseille à tous de lire le nouveau document.
Brett Ryan
6
Les expressions lambda font partie de LINQ.
sesispla
4
@NeWNeO, si vous faites référence au langage de requête en C #, alors oui, rien de tel ne vient à Java, mais selon mon expérience, les développeurs C # les plus expérimentés préfèrent la syntaxe lambda au langage de requête. Cependant, si vous faites référence à LINQ-to-Entities par exemple, vous constaterez que lambdas en java permettra cela et plus encore. Il y a beaucoup plus à venir sur Java 8 pour permettre cela, comme les méthodes de défenseur .
Brett Ryan
119
Vous pouvez sélectionner les éléments d'une collection (et bien plus) de manière plus lisible en utilisant la bibliothèque lambdaj
Il présente certains avantages par rapport à la bibliothèque Quaere car il n'utilise aucune chaîne magique, il est totalement sûr pour le type et à mon avis, il offre une DSL plus lisible.
C'est bien, mais c'est loin d'être sur le point de construire une requête et de l'exécuter à nouveau sql, xml, collection, etc.
bytebender
pourquoi devrais-je obtenir java.lang.ExceptionInInitializerError lors de l'utilisation de lambdaj select sur une classe personnalisée dans mon projet Android?
topwik
1
+1, c'est vraiment bon pour ceux d'entre nous qui ne se soucient pas de SQL / XML et veulent seulement un accès plus facile aux collections.
ashes999
101
Vous ne trouverez un équivalent de LINQ que si vous utilisez le javacc pour créer votre propre équivalent.
Jusqu'à ce jour où quelqu'un trouve un moyen viable de le faire, il existe de bonnes alternatives, telles que
github.com/TrigerSoft/jaque a trouvé cette méthode et permet de créer des arbres d'expression. Combiné avec Java 8 Lambdas, toute capacité LINQ peut être implémentée avec le même effort qu'en .Net.
LINQ to SQL / NHibernate / etc. (interrogation de la base de données) - Une option serait d'utiliser JINQ qui utilise également les nouvelles fonctionnalités JAVA 8 et qui a été publié le 26 février 2014 sur Github: https://github.com/my2iu/Jinq
Jinq fournit aux développeurs un moyen simple et naturel d'écrire des requêtes de base de données en Java. Vous pouvez traiter les données de base de données comme des objets Java normaux stockés dans des collections. Vous pouvez les parcourir et les filtrer à l'aide des commandes Java normales, et tout votre code sera automatiquement traduit en requêtes de base de données optimisées. Enfin, des requêtes de style LINQ sont disponibles pour Java!
Vous ne savez pas pourquoi les lecteurs n'ont pas prêté attention à votre réponse même si l'API Stream est la plus proche de LINQ!
Rafid
3
L'API Streams est une mauvaise blague par rapport à LINQ.
Andrei Rînea
1
Désolé mec, ne veux pas être impoli. Je cherchais un équivalent LINQ après m'être battu la tête avec l'API Streams. je voulais juste dire que ce n'est pas un vrai équivalent, c'est tout.
Andrei Rînea
1
@ AndreiRînea Vous recherchez des fonctionnalités équivalentes pour les fournisseurs LINQ (LINQ to XML, LINQ to JSON, LINQ to NHibernate, etc.)?
Răzvan Flavius Panda
2
Tout ce dont j'avais besoin était un moyen de regrouper et de maximiser une collection .. J'ai finalement réussi mais avec beaucoup d'efforts et trop de code.
Quaere semble fournir un peu de ce que LINQ fournit, mais la question est pour un «équivalent»
AgileJon
6
C'est donc quelque chose comme LINQ, sinon un équivalent direct? Cela semble au moins utile
Brian Agnew
3
@AgileJon: S'il voulait vraiment dire équivalent, il n'aurait pas demandé. Il aurait pu taper from x in xs select xet découvrir la réponse (non).
kizzx2
18
Il existe de nombreux équivalents LINQ pour Java, voir ici pour une comparaison.
Pour un cadre de style Quaere / LINQ typesafe, pensez à utiliser Querydsl . Querydsl prend en charge les collections JPA / Hibernate, JDO, SQL et Java.
Je suis le responsable de Querydsl, donc cette réponse est biaisée.
Maintenant que Java 8 prend en charge les lambdas, il est possible de créer des API Java qui ressemblent étroitement à LINQ.
Jinq est l'une de ces nouvelles bibliothèques de style LINQ pour Java.
Je suis le développeur de cette bibliothèque. Il est basé sur cinq années de recherche sur l'utilisation de l'analyse de bytecode pour traduire Java en requêtes de base de données. Semblable à la façon dont D-LINQ de C # est une couche de requête qui se trouve au-dessus de l'Entity Framework, Jinq est capable d'agir comme une couche de requête reposant sur JPA ou jOOQ. Il prend en charge l'agrégation, les groupes et les sous-requêtes. Même Erik Meijer (le créateur de LINQ) a reconnu Jinq .
Voir SBQL4J . Il s'agit d'un langage de requête puissant de type sécurisé intégré à Java. Permet d'écrire des requêtes compliquées et multipliées imbriquées. Il y a beaucoup d'opérateurs, les méthodes Java peuvent être invoquées à l'intérieur des requêtes comme constructeurs. Les requêtes sont traduites en code Java pur (il n'y a pas de réflexion au moment de l'exécution), donc l'exécution est très rapide.
EDIT: Eh bien, jusqu'à présent SBQL4J, c'est la SEULE extension du langage Java qui offre des capacités de requête similaires à LINQ. Il existe des projets intéressants comme Quaere et JaQue, mais ce ne sont que des API, pas une extension syntaxique / sémantique avec une sécurité de type élevée au moment de la compilation.
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();}});
Semble être une bibliothèque complète pour Java. Certainement pas aussi succinct que LINQ mais semble intéressant.
Vous pouvez essayer ma bibliothèque CollectionsQuery . Il permet d'exécuter des requêtes de type LINQ sur des collections d'objets. Vous devez passer un prédicat, tout comme dans LINQ. Si vous utilisez java6 / 7, vous devez utiliser l'ancienne syntaxe avec les interfaces:
Vous pouvez également l'utiliser en Java8, ou en ancien java avec RetroLambda et son plugin gradle , vous aurez alors une nouvelle syntaxe sophistiquée:
Si vous devez exécuter des requêtes DB, vous pouvez regarder sur JINQ, comme mentionné ci-dessus, mais il ne peut pas être porté en arrière par RetroLambda, essayez d'utiliser des lambdas sérialisés.
Juste pour ajouter une autre alternative: Java 6 a une solution pour les requêtes de base de données de type sécurisé utilisant le package javax.persistence.criteria .
Bien que je doive dire que ce n'est pas vraiment LINQ, car avec LINQ vous pouvez interroger n'importe quel IEnumerable.
On dirait que le Linq dont tout le monde parle ici n'est que LinqToObjects. Ce qui, je crois, n'offre que des fonctionnalités qui peuvent déjà être accomplies aujourd'hui en Java, mais avec une syntaxe vraiment laide.
Ce que je considère comme la véritable puissance de Linq dans .Net, c'est que les expressions lambda peuvent être utilisées dans un contexte nécessitant un délégué ou une expression et seront ensuite compilées sous la forme appropriée. C'est ce qui permet à des choses comme LinqToSql (ou autre chose que LinqToObjects) de fonctionner, et leur permet d'avoir une syntaxe identique à LinqToObjects.
Il semble que tous les projets mentionnés ci-dessus n'offrent que les capacités de LinqToObjects. Ce qui me fait penser que la fonctionnalité de type LinqToSql n'est pas à l'horizon pour Java.
Pour les collections fonctionnelles de base, Java 8 l'a intégré, la plupart des principaux langages JVM non Java l'ont intégré (Scala, Clojure, etc.), et vous pouvez obtenir des bibliothèques supplémentaires pour les versions Java antérieures.
Pour un accès intégré en langue complète à une base de données SQL, Scala (s'exécute sur la JVM) a Slick
Pour LINQ (LINQ to Objects), Java 8 aura quelque chose d'équivalent, voir Project Lambda .
Il a les extensions LINQ to Objects d' Enumerable comme les trucs . Mais pour des choses LINQ plus compliquées comme Expression et ExpressionTree (celles-ci sont nécessaires pour LINQ to SQL et d'autres fournisseurs LINQ s'ils veulent fournir quelque chose d'optimisé et de réel), il n'y a pas encore d'équivalent mais nous verrons peut-être cela à l'avenir :)
Mais je ne pense pas qu'il y aura quelque chose comme des requêtes déclaratives sur Java à l'avenir.
Il n'y a pas une telle fonctionnalité en Java. En utilisant l'autre API, vous obtiendrez cette fonctionnalité. Par exemple, supposons que nous ayons un objet animal contenant un nom et un identifiant. Nous avons des objets de liste ayant des objets animaux. Maintenant, si nous voulons obtenir le nom de tout l'animal qui contient «o» de l'objet liste. nous pouvons écrire la requête suivante
JaQu est l'équivalent LINQ pour Java. Bien qu'il ait été développé pour la base de données H2, il devrait fonctionner pour n'importe quelle base de données car il utilise JDBC.
Ce n'est peut-être pas la réponse que vous espérez, mais si une partie de votre code nécessite un travail important sur les collections (recherche, tri, filtrage, transformations, analyse), vous pouvez prendre en considération pour écrire certaines classes en Clojure ou Scala .
En raison de leur nature fonctionnelle, travailler avec les collections est leur spécialité. Je n'ai pas beaucoup d'expérience avec Scala, mais avec Clojure, vous trouveriez probablement un Linq plus puissant à portée de main et une fois compilé, les classes que vous produiriez s'intégreraient de manière transparente avec le reste de la base de code.
Groovy ou jRuby seraient également des candidats viables, car ils ont tous une nature beaucoup plus fonctionnelle.
cdeszaq
1
Un utilisateur anonyme en a mentionné un autre, Diting :
Diting est une bibliothèque de classes qui offre des capacités de requête sur les collections via des méthodes chaînables et une interface anonyme comme Linq dans .NET. Contrairement à la plupart des autres bibliothèques de collections, celles qui utilisent des méthodes statiques doivent itérer toute la collection, Diting fournit une classe Enumerable de base qui contient des méthodes chaînables différées pour implémenter une requête sur une collection ou un tableau.
Méthodes prises en charge: any, cast, contact, contains, count, distinct, elementAt, except, first, firstOrDefault, groupBy, interset, join, last, lastOrDefault, ofType, orderBy, orderByDescending, reverse, select, selectMany, single, singleOrDefault, skip , skipWhile, take, takeWhile, toArray, toArrayList, union, où
Scala.Maintenant, je l'ai lu et trouvé comme linq mais plus simple et plus illisible. mais scala peut fonctionner sous linux, oui? csharp a besoin de mono.
Scala a besoin d'un runtime Java pour fonctionner: il ne fonctionnera pas nécessairement sur une installation Linux nue non plus en fonction des composants que vous installez.
Rup
@Rup, il existe un environnement JRE entièrement conforme pour GNU / Linux, et Mono n'est pas une implémentation .NET entièrement conforme .
Nom d'affichage
@Sarge Ce n'était pas mon point, mais Mono exécute assez bien LINQ n'est-ce pas? En outre, il existe maintenant le propre .Net Core de Microsoft pour Linux .
Rup
(GNU /) Linux n'est pas la seule plate-forme à part Windows, et JRE existe pour une grande variété de plates-formes. Mono n'implémente pas tout, par exemple, il n'y a pas de WPF.
Nom d'affichage
0
Il y avait le langage de programmation Pizza (une extension Java) et vous devriez y jeter un œil. - Il utilise le concept d '"interfaces fluentes" pour interroger les données de manière déclarative et qui est en principe identique aux expressions de requête LINQ sans requête (http://en.wikipedia.org/wiki/Pizza_programming_language). Mais hélas, cela n'a pas été poursuivi, mais cela aurait été un moyen d'obtenir quelque chose de similaire à LINQ en Java.
Bien sûr, il a été poursuivi, mais pas sous le nom de "Pizza". Les génériques de Pizza ont été fusionnés dans GJ, qui est ensuite devenu le compilateur de référence Java 1.3 (bien que les génériques aient été cachés derrière un drapeau jusqu'au 1.5). En attendant ... le reste des idées, plus quelques autres, sont devenues Scala.
Kevin Wright
Merci pour cette information, bien sûr Scala est un bon point ici. Mais ces capacités n'étaient pas intégrées au langage Java. Vous pouvez utiliser le langage Scala pour implémenter le joli code de requête et utiliser le binaire résultant, puis à partir de Java.
Réponses:
Il n'y a rien de tel que LINQ pour Java.
...
Éditer
Maintenant, avec Java 8, nous sommes initiés à l' API Stream , c'est un genre similaire quand il s'agit de collections, mais ce n'est pas tout à fait la même chose que Linq.
Si c'est un ORM que vous recherchez, comme Entity Framework, vous pouvez essayer Hibernate
:-)
la source
Il existe une autre solution, Coollection .
Coolection n'a pas prétendu être le nouveau lambda, mais nous sommes entourés d'anciens projets Java hérités où cette bibliothèque vous aidera. C'est vraiment simple à utiliser et à étendre, ne couvrant que les actions d'itération les plus utilisées sur les collections, comme ça:
la source
Les Lambdas sont désormais disponibles dans Java 8 sous la forme de JSR-335 - Expressions Lambda pour le langage de programmation JavaTM
MISE À JOUR : JDK8 a maintenant été publié qui contient le projet lambda. Cela vaut la peine de récupérer une copie de Java 8 en action actuellement encore MEAP.
Lisez les articles de Brian Goetz relatifs aux lambdas pour une compréhension décente de la façon dont les lambdas sont implémentés dans JDK8 tout en acquérant une compréhension des flux, des itérations internes, des courts-circuits et des références de constructeur. Consultez également les JSR ci-dessus pour obtenir d'autres exemples. .
J'ai écrit un blog sur certains des avantages de l'utilisation de lambdas dans JDK8 appelé The Power of the Arrow , également NetBeans 8 a un excellent support pour convertir des constructions en JDK8 que j'ai également blogué sur la migration vers JDK 8 avec NetBeans .
la source
Vous pouvez sélectionner les éléments d'une collection (et bien plus) de manière plus lisible en utilisant la bibliothèque lambdaj
https://code.google.com/archive/p/lambdaj/
Il présente certains avantages par rapport à la bibliothèque Quaere car il n'utilise aucune chaîne magique, il est totalement sûr pour le type et à mon avis, il offre une DSL plus lisible.
la source
Vous ne trouverez un équivalent de LINQ que si vous utilisez le javacc pour créer votre propre équivalent.
Jusqu'à ce jour où quelqu'un trouve un moyen viable de le faire, il existe de bonnes alternatives, telles que
la source
LINQ to Objects - JAVA 8 a ajouté l'API Stream qui ajoute la prise en charge des opérations de style fonctionnel sur les flux de valeurs:
Paquet java.util.stream
Java 8 expliqué: application de Lambdas aux collections Java
LINQ to SQL / NHibernate / etc. (interrogation de la base de données) - Une option serait d'utiliser JINQ qui utilise également les nouvelles fonctionnalités JAVA 8 et qui a été publié le 26 février 2014 sur Github: https://github.com/my2iu/Jinq
Site du projet JINQ: http://www.jinq.org/
la source
Il y a un projet appelé quaere .
C'est un framework Java qui ajoute la possibilité d'interroger des collections.
Remarque: Selon l'auteur, le projet n'est plus maintenu.
la source
from x in xs select x
et découvrir la réponse (non).Il existe de nombreux équivalents LINQ pour Java, voir ici pour une comparaison.
Pour un cadre de style Quaere / LINQ typesafe, pensez à utiliser Querydsl . Querydsl prend en charge les collections JPA / Hibernate, JDO, SQL et Java.
Je suis le responsable de Querydsl, donc cette réponse est biaisée.
la source
vous pouvez utiliser scala, sa syntaxe est similaire et il est probablement plus puissant que linq.
la source
Comme en 2014, je peux enfin dire que LINQ est enfin là en java 8.Pas besoin de trouver une alternative à LINQ.
la source
Maintenant que Java 8 prend en charge les lambdas, il est possible de créer des API Java qui ressemblent étroitement à LINQ.
Jinq est l'une de ces nouvelles bibliothèques de style LINQ pour Java.
Je suis le développeur de cette bibliothèque. Il est basé sur cinq années de recherche sur l'utilisation de l'analyse de bytecode pour traduire Java en requêtes de base de données. Semblable à la façon dont D-LINQ de C # est une couche de requête qui se trouve au-dessus de l'Entity Framework, Jinq est capable d'agir comme une couche de requête reposant sur JPA ou jOOQ. Il prend en charge l'agrégation, les groupes et les sous-requêtes. Même Erik Meijer (le créateur de LINQ) a reconnu Jinq .
la source
Voir SBQL4J . Il s'agit d'un langage de requête puissant de type sécurisé intégré à Java. Permet d'écrire des requêtes compliquées et multipliées imbriquées. Il y a beaucoup d'opérateurs, les méthodes Java peuvent être invoquées à l'intérieur des requêtes comme constructeurs. Les requêtes sont traduites en code Java pur (il n'y a pas de réflexion au moment de l'exécution), donc l'exécution est très rapide.
EDIT: Eh bien, jusqu'à présent SBQL4J, c'est la SEULE extension du langage Java qui offre des capacités de requête similaires à LINQ. Il existe des projets intéressants comme Quaere et JaQue, mais ce ne sont que des API, pas une extension syntaxique / sémantique avec une sécurité de type élevée au moment de la compilation.
la source
Implémentation de Java LINQ to SQL . Fournit une intégration linguistique complète et un ensemble de fonctionnalités plus large que .NET LINQ.
la source
J'ai essayé les bibliothèques de goyaves de google. Il a un
FluentIterable
qui, je pense, est proche de LINQ. Voir également FunctionalExplained .Semble être une bibliothèque complète pour Java. Certainement pas aussi succinct que LINQ mais semble intéressant.
la source
https://code.google.com/p/joquery/
Prend en charge différentes possibilités,
Étant donné la collection,
de type,
Filtre
Java 7
Java 8
Aussi,
Tri (également disponible pour Java 7)
Groupement (également disponible pour Java 7)
Jointures (également disponible pour Java 7)
Donné,
Peut être rejoint comme,
Expressions
la source
Vous pouvez essayer ma bibliothèque CollectionsQuery . Il permet d'exécuter des requêtes de type LINQ sur des collections d'objets. Vous devez passer un prédicat, tout comme dans LINQ. Si vous utilisez java6 / 7, vous devez utiliser l'ancienne syntaxe avec les interfaces:
Vous pouvez également l'utiliser en Java8, ou en ancien java avec RetroLambda et son plugin gradle , vous aurez alors une nouvelle syntaxe sophistiquée:
Si vous devez exécuter des requêtes DB, vous pouvez regarder sur JINQ, comme mentionné ci-dessus, mais il ne peut pas être porté en arrière par RetroLambda, essayez d'utiliser des lambdas sérialisés.
la source
Juste pour ajouter une autre alternative: Java 6 a une solution pour les requêtes de base de données de type sécurisé utilisant le package javax.persistence.criteria .
Bien que je doive dire que ce n'est pas vraiment LINQ, car avec LINQ vous pouvez interroger n'importe quel IEnumerable.
la source
Il existe une très bonne bibliothèque que vous pouvez utiliser pour cela.
Situé ici: https://github.com/nicholas22/jpropel-light
Les lambdas ne seront cependant pas disponibles avant Java 8, donc son utilisation est un peu différente et ne semble pas aussi naturelle.
la source
On dirait que le Linq dont tout le monde parle ici n'est que LinqToObjects. Ce qui, je crois, n'offre que des fonctionnalités qui peuvent déjà être accomplies aujourd'hui en Java, mais avec une syntaxe vraiment laide.
Ce que je considère comme la véritable puissance de Linq dans .Net, c'est que les expressions lambda peuvent être utilisées dans un contexte nécessitant un délégué ou une expression et seront ensuite compilées sous la forme appropriée. C'est ce qui permet à des choses comme LinqToSql (ou autre chose que LinqToObjects) de fonctionner, et leur permet d'avoir une syntaxe identique à LinqToObjects.
Il semble que tous les projets mentionnés ci-dessus n'offrent que les capacités de LinqToObjects. Ce qui me fait penser que la fonctionnalité de type LinqToSql n'est pas à l'horizon pour Java.
la source
Pour les collections fonctionnelles de base, Java 8 l'a intégré, la plupart des principaux langages JVM non Java l'ont intégré (Scala, Clojure, etc.), et vous pouvez obtenir des bibliothèques supplémentaires pour les versions Java antérieures.
Pour un accès intégré en langue complète à une base de données SQL, Scala (s'exécute sur la JVM) a Slick
la source
Pour LINQ (LINQ to Objects), Java 8 aura quelque chose d'équivalent, voir Project Lambda .
Il a les extensions LINQ to Objects d' Enumerable comme les trucs . Mais pour des choses LINQ plus compliquées comme Expression et ExpressionTree (celles-ci sont nécessaires pour LINQ to SQL et d'autres fournisseurs LINQ s'ils veulent fournir quelque chose d'optimisé et de réel), il n'y a pas encore d'équivalent mais nous verrons peut-être cela à l'avenir :)
Mais je ne pense pas qu'il y aura quelque chose comme des requêtes déclaratives sur Java à l'avenir.
la source
Il n'y a pas une telle fonctionnalité en Java. En utilisant l'autre API, vous obtiendrez cette fonctionnalité. Par exemple, supposons que nous ayons un objet animal contenant un nom et un identifiant. Nous avons des objets de liste ayant des objets animaux. Maintenant, si nous voulons obtenir le nom de tout l'animal qui contient «o» de l'objet liste. nous pouvons écrire la requête suivante
from(animals).where("getName", contains("o")).all();
La déclaration de requête ci-dessus répertorie les animaux qui contiennent l'alphabet «o» dans leur nom. Pour plus d'informations, veuillez consulter le blog suivant. http://javaworldwide.blogspot.in/2012/09/linq-in-java.html
la source
Découvrez Tiny-Q . (Notez que vous ne pouvez pas actuellement le télécharger.)
Voici un exemple adapté du lien ci-dessus:
la source
JaQu est l'équivalent LINQ pour Java. Bien qu'il ait été développé pour la base de données H2, il devrait fonctionner pour n'importe quelle base de données car il utilise JDBC.
la source
Ce n'est peut-être pas la réponse que vous espérez, mais si une partie de votre code nécessite un travail important sur les collections (recherche, tri, filtrage, transformations, analyse), vous pouvez prendre en considération pour écrire certaines classes en Clojure ou Scala .
En raison de leur nature fonctionnelle, travailler avec les collections est leur spécialité. Je n'ai pas beaucoup d'expérience avec Scala, mais avec Clojure, vous trouveriez probablement un Linq plus puissant à portée de main et une fois compilé, les classes que vous produiriez s'intégreraient de manière transparente avec le reste de la base de code.
la source
Un utilisateur anonyme en a mentionné un autre, Diting :
la source
Scala.Maintenant, je l'ai lu et trouvé comme linq mais plus simple et plus illisible. mais scala peut fonctionner sous linux, oui? csharp a besoin de mono.
la source
Il y avait le langage de programmation Pizza (une extension Java) et vous devriez y jeter un œil. - Il utilise le concept d '"interfaces fluentes" pour interroger les données de manière déclarative et qui est en principe identique aux expressions de requête LINQ sans requête (http://en.wikipedia.org/wiki/Pizza_programming_language). Mais hélas, cela n'a pas été poursuivi, mais cela aurait été un moyen d'obtenir quelque chose de similaire à LINQ en Java.
la source
Il n'y a pas d'équivalent à LINQ pour Java. Mais il y a une partie de l'API externe qui ressemble à LINQ comme https://github.com/nicholas22/jpropel-light , https://code.google.com/p/jaque/
la source
vous pouvez essayer cette bibliothèque: https://code.google.com/p/qood/
Voici quelques raisons de l'utiliser:
la source