J'ai de l'expérience en programmation C#, mais j'ai besoin de changer quelque chose dans le projet Java, alors ma question est: Y A-T-IL DANS JAVA QUELQUE SIMPLE LINQ IN C#? Je dois interroger des listes en Java.Linq like for Java
Répondre
Rien ne ressemble à LINQ pour Java. Pardon. En recherchant sur Google, j'ai trouvé this project mais bien sûr vous ne pouvez pas attendre la même intégration dans la langue ou un sucre syntaxique que vous pourriez obtenir en C#.
Cela dépend de ce que vous voulez faire, exactement. La notion de notation lambda de C# peut être imitée de façon beaucoup plus verbeuse en utilisant des classes anonymes. Vous pouvez donc créer une méthode Where
qui prend un Function<T, bool>
, où Function<T1, TReturn>
est une classe qui a une seule méthode (par exemple Execute
). Je comprends que Guava a quelque chose comme ça.
L'idée serait de dire alors quelque chose comme ceci:
Iterable<Ball> redBalls = Enumerable.Where(balls,
new Function<Ball, bool>() {
public bool Execute(Ball b) { return b.getColor() == Color.Red; }
});
Mais pour tout ce travail, vous pourriez aussi bien avoir fait sans Linq:
List<Ball> redBalls = new ArrayList<Ball>();
for(Ball ball in balls) {
if(ball.getColor() == Color.Red) {redBalls.add(ball);}
}
Malheureusement, il est loin Criez de ce que vous pouvez faire lorsque vous combinez des expressions lambda, des types déduits, des propriétés et des méthodes d'extension, comme le fait C#.
var redBalls = balls.Where(b => b.Color == Color.Red);
code comme celui-ci ne sera possible que lorsque Java implémente des expressions lambda, qui était prévu pour la version 7, mais a été repoussée en arrière à la « prochaine version ». Et des choses comme LINQ to SQL ou LINQ to Entities ne seront possibles que si elles obtiennent des arbres Expression, ce qui ne me semble même pas dans la feuille de route.
Modifier
Certaines personnes ont trouvé des bibliothèques complexes pour simuler ce comportement, cependant. Beaucoup utilisent des "chaînes magiques" pour exécuter les parties des requêtes qu'elles ne peuvent pas fournir de valeurs vérifiées par le compilateur. LambdaJ utilise des objets proxy pour faire le compilateur pense que vous travaillez avec un de vos objets, ce qui vous permet d'appeler getter et setter avec des contrôles de compilation, à la recherche quelque chose comme ceci:
List<Person> redBalls = filter(having(
on(Ball.class).getColor(), equalTo(Color.RED)),
balls);
Ils sont très intelligents, mais aucun ne peut vraiment correspondre à la simplicité de LINQ à ce stade.
- 1. Dynamic LINQ Like
- 2. Élément ou classe LIKE selector for jQuery?
- 3. Linq LIKE fonctionnalité
- 4. Like condition in LINQ
- 5. NHibernate Linq Like Query Question
- 6. listener C# like java
- 7. Graphing Profiler for Java?
- 8. Comment utiliser Like dans Linq Query?
- 9. LINQ à SQL SubSelect Like Query
- 10. Linq équivalent à SQL LIKE [a-f]
- 11. LINQ Multiple LIKE basé sur Liste
- 12. Comment faire une requête LIKE avec linq?
- 13. Version LINQ de l'instruction LIKE de SQL
- 14. GAE For Java: API Mail
- 15. Java Synchronized Block for .class
- 16. AutoIt like GUI outil d'automatisation pour Java
- 17. Boucle Java For-Each: Ordre de tri
- 18. Toute limite WorkAround For Java ResultSet
- 19. Java Data Structure for string correspondant
- 20. Qu'est-ce que @Override for Java?
- 21. comportement sur Incohérence java de for-each
- 22. NHibernate.Linq LIKE
- 23. Tab Like Like Sélection
- 24. LINQ pour les requêtes LIKE des éléments du tableau
- 25. Comment utiliser "contains" ou "like" dans une requête linq dynamique?
- 26. Linq/SQL Query Tri pour plusieurs Condition LIKE
- 27. Utilisation de l'opérateur LIKE dans LINQ to Entity
- 28. Qu'est-ce que FirstOrDefault for DateTime dans Linq?
- 29. Checkstyle for ActionScript (Flex)
- 30. Utiliser l'opérateur LIKE dans Access fonctionne mais pas Java
pas vraiment la même chose ... la question "LINQ for Java tool" est plutôt une question d'étude de marché. – CrazyDart
Utiliser la bibliothèque LAMBDAJ. – Zasz
Cochez cette case: github.com/nicholas22/jpropel-light, exemple réel: new String [] {"james", "john", "john", "eddie"} .where (startsWith ("j")). toList(). distinct(); –