Что такое Java-эквивалент для LINQ? [закрыто]

Измените несколько файлов по расширению на UTF-8 без спецификации:

$Utf8NoBomEncoding = New-Object System.Text.UTF8Encoding($False)
foreach($i in ls -recurse -filter "*.java") {
    $MyFile = Get-Content $i.fullname 
    [System.IO.File]::WriteAllLines($i.fullname, $MyFile, $Utf8NoBomEncoding)
}
788
задан abatishchev 27 September 2014 в 06:30
поделиться

10 ответов

Нет ничего лучше LINQ для Java.

...

Править

Теперь с Java 8 мы познакомились с Stream API , это аналогичен при работе с коллекциями, но не совсем то же самое, что и Linq.

Если вы ищете ORM, например Entity Framework, вы можете попробовать Hibernate

: -)

801
ответ дан 22 November 2019 в 21:17
поделиться

Был язык программирования Pizza (расширение Java), и вы должны взглянуть на него. - Он использует концепцию «плавных интерфейсов» для запроса данных декларативным способом, что в принципе идентично LINQ без выражений запросов (http://en.wikipedia.org/wiki/Pizza_programming_language). Но, увы, это не преследовалось, но это был бы один из способов получить что-то похожее на LINQ в Java.

0
ответ дан Nico 27 September 2014 в 06:30
поделиться

Похоже, что Linq, о котором все здесь говорят, это просто LinqToObjects. Который, я полагаю, предлагает только функциональность, которая уже может быть реализована сегодня в Java, но с действительно уродливым синтаксисом.

Реальная сила Linq в .Net заключается в том, что лямбда-выражения можно использовать в контексте, требующем либо делегата, либо выражения, и затем они будут скомпилированы в соответствующую форму. Это то, что позволяет таким вещам, как LinqToSql (или что-либо кроме LinqToObjects), и позволяет им иметь синтаксис, идентичный LinqToObjects.

Похоже, что все проекты, упомянутые выше, предлагают только возможности LinqToObjects. Что заставляет меня задуматься о том, что функциональность типа LinqToSql не стоит на пороге Java.

4
ответ дан MarkPflug 27 September 2014 в 06:30
поделиться

LINQ to Objects - JAVA 8 добавил Stream API, который добавляет поддержку операций функционального стиля над потоками значений:

Пакет java.util.stream

Объяснение Java 8: применение лямбда-выражений к коллекциям Java

LINQ to SQL / NHibernate / и т.д. (запросы к базе данных) - Одним из вариантов будет использование JINQ, который также использует новые функции JAVA 8 и был выпущен 26 февраля 2014 года на Github: https://github.com/my2iu/Jinq

Jinq предоставляет разработчикам простой и естественный способ написания запросов к базе данных на Java. Вы можете обрабатывать данные базы данных как обычные объекты Java, хранящиеся в коллекциях. Вы можете перебирать их и фильтровать, используя обычные команды Java, и весь ваш код будет автоматически преобразован в оптимизированные запросы к базе данных. Наконец, доступны запросы в стиле LINQ для Java!

Сайт проекта JINQ: http://www.jinq.org/

49
ответ дан Răzvan Flavius Panda 27 September 2014 в 06:30
поделиться

Существует альтернативное решение, Coollection .

Coolection не претендует на звание новой лямбды, однако мы окружены старыми унаследованными Java-проектами, в которых эта библиотека поможет. Его действительно просто использовать и расширять, охватывая только наиболее часто используемые действия итерации над коллекциями, например:

from(people).where("name", eq("Arthur")).first();
from(people).where("age", lessThan(20)).all();
from(people).where("name", not(contains("Francine"))).all();
154
ответ дан 19WAS85 27 September 2014 в 06:30
поделиться

Конечно, тысячи. То же верно и для любой разработки программного обеспечения. К сожалению, самый простой способ перечислить их - записать их на листе бумаги, ожидая, пока дружелюбная душа освободит вас от той, в которую вы только что упали.

Однако:

  1. Не пытайтесь изобретать заново. колесо. API iPhone очень полный - вам просто нужно ИСКАТЬ, что вам нужно. Вещи НЕ всегда реализуются так, как вы ожидаете. Внимательно прочтите руководства. Посмотрите учебные пособия и проанализируйте, как они работают. (Попробуйте изменить строку здесь или там в руководстве, чтобы увидеть, в чем разница.) Единственная самая большая ошибка, которую я сделал за 1 год разработки iPhone, - это недостаточно стараться найти способ iPhone из что-то делает.

  2. Дон ' t игнорировать управление памятью; овладевайте им рано и часто. Используйте инструменты Object Allocation и Leaks в Instruments, чтобы часто проверять утечки памяти. Я бы рекомендовал проверять после завершения каждой функции или просмотра; чаще, чем это, если вы продолжаете находить ошибки. В конце концов, вы можете понять это настолько хорошо, что можете перестать это делать.

  3. Не используйте просто настройки сборки по умолчанию. Поиграйте с ними, чтобы понять, что они делают. Разберитесь в сертификации и распределении. БЫСТРО ВСТУПИТЕ В ПРОГРАММУ РАЗРАБОТЧИКА - на прохождение этого конвейера может потребоваться время. [И когда вы получите уведомление о том, что вам необходимо продлить подписку, немедленно включите его - с этим процессом возникли проблемы. ]

  4. Не забудьте внимательно прочитать Руководство по человеческому интерфейсу (HIG). Если они говорят что-то не делать - НЕ ДЕЛАЙТЕ ЭТОГО. Apple будет отклонять заявки, которые злоупотребляют своей иконографией.

  5. Не скупитесь на маркетинг. Да, App Store представляет ваше приложение миллионам людей ... Теоретически. Но шансы попасть на первую полосу невелики. В App Store есть много отличных приложений, которые мало продаются, потому что о них никто не знает.

  6. Не останавливайтесь на достигнутом. Если появится новая технология, узнайте, облегчает ли она вашу работу; если это так, найдите время, чтобы изучить это. Личный пример: я только сейчас пытаюсь переключиться с управления данными на основе SQLite на Core Data, потому что я очень спешил, когда начинал свой последний проект; теперь мне жаль, что я не замедлился и подумал об этом.

  7. Не вдавайтесь в свое дизайнерское мышление (например) «Как мне реализовать мою концепцию с табличным представлением?» Это' Верно, что представления таблиц естественны для многих информационных и служебных приложений, но их нельзя ограничивать. Вместо этого подумайте о том, что пользователи захотят делать, как вы можете упростить им задачу - собрать вещи, которые будут использоваться вместе, и т. Д. Если вы никогда не изучали концепцию вариантов использования, прочтите их.

  8. Не бойтесь создавать составные представления. Многие из вопросов, которые я видел здесь, в Stack Overflow, связаны с размещением панели инструментов в верхней части таблицы или с изображением на фоне текстового поля. Я понимаю желание делать что-то простым способом, и, как я заявляю в пункте 1 выше, если есть простой способ, используйте его. Но во многих случаях решение состоит в том, чтобы просто наложить несколько слоев с соответствующим размещением и прозрачностью.

29
ответ дан 22 November 2019 в 21:17
поделиться

Есть много эквивалентов LINQ для Java, смотрите здесь для сравнения.

Для фреймворка стилей Quaere/LINQ можно использовать Querydsl. Querydsl поддерживает коллекции JPA/Hibernate, JDO, SQL и Java.

Я сопровождающий Querydsl, поэтому данный ответ является предвзятым.

18
ответ дан 22 November 2019 в 21:17
поделиться

Вы можете выбрать элементы в коллекции (и многое другое) более читаемым способом, используя библиотеку lambdaj

https://code.google.com/Archive/p/lambdaj/

Некоторые преимущества по поводу библиотеки Quere, потому что она не использует никакой волшебной строки, она полностью безопасна и на мой взгляд, он предлагает более читаемый DSL.

119
ответ дан 22 November 2019 в 21:17
поделиться

Реализация Java LINQ to SQL . Обеспечивает полную языковую интеграцию и более широкий набор функций по сравнению с .NET LINQ.

8
ответ дан 22 November 2019 в 21:17
поделиться

См. SBQL4J . Это типобезопасный строгий язык запросов, интегрированный с Java. Позволяет писать сложные и многократно вложенные запросы. Операторов много, Java-методы можно вызывать как внутри запросов, так и как конструкторы. Запросы переводятся в чистый код Java (во время выполнения нет отражения), поэтому выполнение выполняется очень быстро.

РЕДАКТИРОВАТЬ: Ну, пока что SBQL4J - это ЕДИНСТВЕННОЕ расширение языка Java, которое предоставляет возможности запросов, аналогичные LINQ. Есть несколько интересных проектов, таких как Quaere и JaQue, но они представляют собой только API, а не расширение синтаксиса / семантики со строгой безопасностью типов во время компиляции.

8
ответ дан 22 November 2019 в 21:17
поделиться
Другие вопросы по тегам:

Похожие вопросы: