@craastad Sebagai seorang. NET sekarang sebagian besar terjebak di dunia Java, saya merasakan sakit Anda. Anda harus mencoba Scala - fungsi / penutupan kelas pertama, untuk pemahaman (tidak sama dengan sintaks query LINQ, tetapi berguna dalam banyak situasi yang sama), sistem tipe terpadu, inferensi tipe, beberapa solusi yang mudah untuk penghapusan tipe generik ... semua berjalan di JVM, beroperasi dengan Java. Ditambah banyak kebaikan fungsional lainnya seperti pencocokan pola, jenis opsi, dll.
Tim Goodman
Jawaban:
808
Tidak ada yang seperti LINQ untuk Java.
...
Edit
Sekarang dengan Java 8 kami diperkenalkan dengan Stream API , ini adalah hal yang mirip ketika berhadapan dengan koleksi, tetapi tidak persis sama dengan Linq.
Jika ORM yang Anda cari, seperti Entity Framework, maka Anda dapat mencoba Hibernate
apakah ada sesuatu dalam rencana itu? diintegrasikan ke dalam bahasa? Apakah ada nomor JCP? dll.
Cheeso
6
Sangat benar, meskipun sebagian besar dari apa yang membuat LINQ sangat bagus adalah seberapa dalam ia diintegrasikan ke dalam bahasa dan kompiler
AgileJon
11
Maaf, 'sangat benar' dimaksudkan untuk 280Z28. Saya tidak tahu apakah ada JCP untuk itu. LINQ mengharuskan beberapa perubahan pada bahasa C #, mengingat kecepatan JCP bekerja pada saya tidak akan menahan nafas.
LINQ adalah spesifikasi, bukan implementasi ... Ekspresi Lambda adalah bagian dari LINQ. Semua proyek yang mencoba untuk mengirim LINQ ke Java adalah implementasi untuk skenario konkret (SQL, Objects ...) tetapi tidak mencakup tujuan utama LINQ: Mengintegrasikan Query Bahasa dalam kode. Karena itu, tidak ada alternatif nyata atau initatif, untuk saat ini, yang dapat dianggap sebagai alternatif.
Coolection tidak berpura-pura menjadi lambda baru, namun kami dikelilingi oleh proyek-proyek lama Jawa di mana lib ini akan membantu. Ini sangat sederhana untuk digunakan dan diperluas, hanya mencakup tindakan iterasi yang paling banyak digunakan pada koleksi, seperti itu:
String untuk nama kolom, yang berarti kompiler dan IDE autocomplete tidak akan membantu melawan kesalahan ketik dan refactoring sulit. Adakah rencana untuk mengubahnya?
Ekevoo
2
Hai, Ekevoo. Saya pikir itu akan menjadi luar biasa dan saya mencoba melakukannya kapan-kapan. Tetapi pada saat ini, dengan Java 8, Coollection adalah lib yang sudah usang. Mungkin ini berguna untuk proyek tertua ... Bagaimana menurut Anda?
19WAS85
1
@WagnerAndrade Komit terakhir adalah 5-6 tahun yang lalu. Saya mengasumsikan fungsi sebagian besar digantikan oleh Java 8? Juga, nama yang sangat keren :)
Bacalah artikel Brian Goetz yang berkaitan dengan lambdas untuk pemahaman yang layak tentang bagaimana lambdas diimplementasikan dalam JDK8 sementara juga mendapatkan pemahaman tentang stream, iterasi internal, hubungan pendek dan referensi konstruktor .. Juga periksa JSR di atas untuk mendapatkan contoh lebih lanjut .
Saya telah menulis sebuah blog tentang beberapa keuntungan menggunakan lambdas di JDK8 yang disebut The Power of the Arrow , juga NetBeans 8 memiliki dukungan besar untuk mengkonversi konstruk ke JDK8 yang saya juga blogging tentang Migrasi ke JDK 8 dengan NetBeans .
Bukankah lambdas juga dijadwalkan berada di Jawa 7? Apa yang terjadi dengan itu?
BlueRaja - Danny Pflughoeft
7
Oracle membeli Sun (lidah di pipi). Java 7 terlalu lama (5 tahun) sehingga lambdas tidak masuk dalam daftar pendek, ini agak mengecewakan massa. Itu dikatakan Oracle memang terlihat seperti mengambil bola dan saya pikir kami dijadwalkan untuk Jawa 8 Oktober tahun depan.
Brett Ryan
1
Perhatikan bahwa Status Lambda telah diperbarui sekali lagi yang sekarang mencakup stream, iterasi internal, hubungan arus pendek, dan referensi konstruktor. Saya menyarankan Anda semua untuk membaca dokumen baru.
Brett Ryan
6
Ekspresi Lambda adalah bagian kecil dari LINQ.
sesispla
4
@NeWNeO, jika Anda merujuk ke bahasa query di C # maka ya, tidak ada yang seperti ini yang datang ke Jawa, namun dalam pengalaman saya kebanyakan pengembang C # yang berpengalaman lebih suka sintaks lambda daripada bahasa query. Namun jika Anda merujuk ke LINQ-to-Entities misalnya maka Anda akan menemukan bahwa lambdas di java akan mengaktifkan ini dan banyak lagi. Ada banyak lagi yang datang ke Java 8 untuk mengaktifkan ini, seperti metode bek .
Brett Ryan
119
Anda dapat memilih item dalam koleksi (dan banyak lagi) dengan cara yang lebih mudah dibaca dengan menggunakan perpustakaan lambdaj
Ini memiliki beberapa keunggulan dibandingkan perpustakaan Quaere karena tidak menggunakan string ajaib, itu benar-benar tipe aman dan menurut saya itu menawarkan DSL yang lebih mudah dibaca.
github.com/TrigerSoft/jaque menemukan cara ini dan mari kita membuat Pohon Ekspresi. Dikombinasikan dengan Java 8 Lambdas, kapasitas LINQ apa pun dapat diimplementasikan dengan upaya yang sama seperti di .Net.
LINQ ke SQL / NHibernate / dll. (query database) - Salah satu opsi adalah menggunakan JINQ yang juga menggunakan fitur JAVA 8 baru dan dirilis pada 26 Februari 2014 di Github: https://github.com/my2iu/Jinq
Jinq menyediakan pengembang cara mudah dan alami untuk menulis kueri basis data di Jawa. Anda dapat memperlakukan data basis data seperti objek Java normal yang disimpan dalam koleksi. Anda dapat mengulanginya dan memfilternya menggunakan perintah Java normal, dan semua kode Anda akan secara otomatis diterjemahkan ke dalam kueri basis data yang dioptimalkan. Akhirnya, kueri gaya LINQ tersedia untuk Java!
Tidak yakin mengapa pembaca tidak memperhatikan jawaban Anda meskipun Stream API adalah yang paling dekat dengan LINQ!
Rafid
3
Streams API adalah lelucon buruk dibandingkan dengan LINQ.
Andrei Rînea
1
Maaf kawan, jangan bermaksud kasar. Saya mencari yang setara LINQ setelah mengalahkan kepalaku dengan stream API. Saya hanya ingin mengatakan bahwa itu tidak setara nyata, itu saja.
Andrei Rînea
1
@ AndreiRînea Apakah Anda mencari penyedia LINQ (LINQ ke XML, LINQ ke JSON, LINQ ke NHibernate, dll.) Fungsi yang setara?
Răzvan Flavius Panda
2
Yang saya butuhkan adalah sarana untuk mengelompokkan dan memaksimalkan koleksi .. Saya akhirnya berhasil tetapi dengan banyak usaha dan terlalu banyak kode.
Quaere sepertinya memberikan sedikit dari apa yang LINQ sediakan, tetapi pertanyaannya adalah untuk 'setara'
AgileJon
6
Jadi itu sesuatu seperti LINQ, jika tidak setara langsung? Setidaknya itu terdengar membantu
Brian Agnew
3
@ AgileJon: Jika dia benar-benar berarti setara, dia tidak akan bertanya. Dia bisa saja mengetik from x in xs select xdan menemukan jawabannya (tidak).
kizzx2
18
Ada banyak padanan LINQ untuk Java, lihat di sini untuk perbandingan.
Untuk kerangka kerja gaya Quaere / LINQ yang aman, coba gunakan Querydsl . Querydsl mendukung JPA / Hibernate, JDO, SQL dan Java Collections.
Saya adalah pengelola Querydsl, jadi jawaban ini bias.
Sekarang Java 8 mendukung lambdas, dimungkinkan untuk membuat API Java yang sangat mirip dengan LINQ.
Jinq adalah salah satu pustaka gaya LINQ baru untuk Java.
Saya adalah pengembang perpustakaan ini. Ini didasarkan pada lima tahun penelitian tentang penggunaan analisis bytecode untuk menerjemahkan Java ke permintaan basis data. Mirip dengan bagaimana C # D-LINQ adalah lapisan permintaan yang duduk di atas Entity Framework, Jinq dapat bertindak sebagai lapisan permintaan yang berada di atas JPA atau jOOQ. Ini memiliki dukungan untuk agregasi, grup, dan subkueri. Bahkan Erik Meijer (pencipta LINQ) telah mengakui Jinq .
Lihat SBQL4J . Ini adalah jenis bahasa query kuat yang aman yang terintegrasi dengan Java. Mengizinkan menulis kueri yang rumit dan berlipat ganda. Ada banyak operator, metode Java dapat dipanggil dalam permintaan sehingga sebagai konstruktor. Permintaan diterjemahkan ke kode Java murni (tidak ada refleksi saat runtime) sehingga eksekusi sangat cepat.
EDIT: Yah, sejauh ini SBQL4J itu adalah ekstensi HANYA ke bahasa Java yang memberikan kemampuan query yang mirip dengan LINQ. Ada beberapa proyek menarik seperti Quaere dan JaQue tetapi mereka hanya API, bukan ekstensi sintaksis / semantik dengan keamanan tipe kuat dalam waktu kompilasi.
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();}});
Tampaknya menjadi perpustakaan yang luas untuk Jawa. Tentu saja tidak sesingkat LINQ tetapi terlihat menarik.
Anda dapat mencoba koleksi saya CollectionsQuery . Hal ini memungkinkan untuk menjalankan LINQ seperti kueri atas koleksi objek. Anda harus melewati predikat, seperti di LINQ. Jika Anda menggunakan java6 / 7 daripada Anda harus menggunakan sintaks lama dengan Antarmuka:
Jika Anda perlu menjalankan query DB, daripada yang dapat Anda lihat di JINQ, seperti yang disebutkan di atas, tetapi tidak dapat di-porting kembali oleh RetroLambda, lakukan penggunaan lambdas berseri.
Kedengarannya seperti Linq yang dibicarakan semua orang di sini hanyalah LinqToObjects. Yang saya percaya hanya menawarkan fungsionalitas yang sudah dapat dicapai hari ini di Jawa, tetapi dengan sintaks yang benar-benar jelek.
Apa yang saya lihat sebagai kekuatan sebenarnya dari Linq di .Net adalah bahwa ekspresi lambda dapat digunakan dalam konteks yang membutuhkan delegasi atau ekspresi dan kemudian akan dikompilasi ke dalam bentuk yang sesuai. Inilah yang memungkinkan hal-hal seperti LinqToSql (atau apa pun selain LinqToObjects) berfungsi, dan memungkinkan mereka memiliki sintaksis yang identik dengan LinqToObjects.
Sepertinya semua proyek yang disebutkan di atas hanya menawarkan kemampuan LinqToObjects. Yang membuat saya hal bahwa fungsi tipe LinqToSql tidak di cakrawala untuk Jawa.
Untuk koleksi fungsional dasar, Java 8 memiliki built-in, sebagian besar bahasa JVM non-Java utama memilikinya built-in (Scala, Clojure, dll), dan Anda bisa menambahkan libs untuk versi Java yang lebih lama.
Untuk akses terintegrasi bahasa penuh ke database SQL, Scala (berjalan pada JVM) memiliki Slick
Untuk LINQ (LINQ to Objects), Java 8 akan memiliki sesuatu yang setara, lihat Project Lambda .
Ini memiliki Enumerable's LINQ untuk ekstensi Objects seperti barang . Tetapi untuk hal-hal LINQ yang lebih rumit seperti Ekspresi dan ExpressionTree (ini diperlukan untuk LINQ ke SQL dan penyedia LINQ lainnya jika mereka ingin memberikan sesuatu yang dioptimalkan dan nyata), belum ada yang setara tapi mungkin kita akan melihat itu di masa depan :)
Tapi saya tidak berpikir akan ada sesuatu seperti pertanyaan deklaratif di Jawa di masa depan
Tidak ada fitur seperti itu di java. Dengan menggunakan API lain Anda akan mendapatkan fitur ini. Seperti misalkan kita memiliki Obyek hewan yang berisi nama dan id. Kami memiliki objek daftar yang memiliki objek hewan. Sekarang jika kita ingin mendapatkan semua nama hewan yang berisi 'o' dari daftar objek. kita bisa menulis kueri berikut
Mungkin bukan jawaban yang Anda harapkan, tetapi jika beberapa bagian dari kode Anda memerlukan pekerjaan berat pada koleksi (pencarian, pengurutan, pemfilteran, transformasi, analisis), Anda dapat mempertimbangkan untuk menulis beberapa kelas di Clojure atau Scala .
Karena sifatnya yang fungsional, bekerja dengan koleksi adalah yang terbaik. Saya tidak punya banyak pengalaman dengan Scala, tetapi dengan Clojure Anda mungkin akan menemukan Linq yang lebih kuat di ujung jari Anda dan setelah dikompilasi, kelas yang Anda hasilkan akan berintegrasi mulus dengan sisa basis kode.
Groovy atau jRuby juga akan menjadi kandidat yang layak, karena mereka semua memiliki sifat yang jauh lebih fungsional.
cdeszaq
1
Seorang pengguna anonim menyebutkan satu lagi, Diting :
Diting adalah pustaka kelas yang menyediakan kemampuan kueri pada koleksi melalui metode berantai dan antarmuka anonim seperti Linq di .NET. Tidak seperti kebanyakan perpustakaan koleksi lain yang menggunakan metode statis perlu mengulangi seluruh koleksi, Diting menyediakan inti Enumerable class whitch berisi metode yang dapat ditangguhkan yang dideferensi untuk mengimplementasikan kueri pada koleksi atau array.
Metode yang Didukung: any, cast, contact, berisi, hitung, berbeda, elementAt, kecuali, pertama, pertama, atau Kesalahan, grup. Dengan, interset, gabung, terakhir, terakhir, atau Kesalahan, dari Jenis, pesanan, Dengan, kirim, turun, balikkan, pilih, pilihBanyak, tunggal, tunggal atau Kerusakan, lewati , skipWhile, take, takeWhile, toArray, toArrayList, union, where
Scala. Sekarang saya membacanya, dan menemukannya seperti LINQ tetapi lebih sederhana dan lebih tidak dapat dibaca. tapi scala bisa dijalankan di linux, ya? csharp butuh mono.
Scala membutuhkan runtime Java untuk dijalankan: itu tidak akan selalu berfungsi pada instalasi Linux kosong tergantung pada komponen apa yang Anda instal.
Rup
@Rup, ada JRE yang sepenuhnya sesuai untuk GNU / Linux, dan Mono tidak sepenuhnya menerapkan .NET.
Nama Tampilan
@ Besar Itu bukan poin saya, tapi Mono menjalankan LINQ dengan cukup baik bukan? Selain itu, sekarang ada .Net Core untuk Linux milik Microsoft .
Rup
(GNU /) Linux bukan satu-satunya platform selain Windows, dan JRE ada untuk berbagai macam platform. Mono tidak sepenuhnya mengimplementasikan semuanya, misalnya tidak ada WPF.
Nama Tampilan
0
Ada bahasa pemrograman Pizza (ekstensi Java) dan Anda harus melihatnya. - Menggunakan konsep "antarmuka lancar" untuk meminta data dengan cara deklaratif dan yang pada prinsipnya identik dengan LINQ tanpa ekspresi permintaan (http://en.wikipedia.org/wiki/Pizza_programming_language). Namun sayang itu tidak dikejar, tetapi itu akan menjadi salah satu cara untuk mendapatkan sesuatu yang mirip dengan LINQ ke Jawa.
Tentu itu dikejar, hanya saja tidak dengan nama "Pizza". Obat generik dari Pizza digabung menjadi GJ, yang kemudian menjadi kompiler referensi Java 1.3 (meskipun obat generik disembunyikan di belakang sebuah bendera hingga 1,5). Sementara itu ... sisa ide, ditambah beberapa tambahan, menjadi Scala.
Kevin Wright
Terima kasih atas info itu, tentu saja Scala adalah poin yang bagus di sini. Namun kemampuan ini di mana tidak terintegrasi ke dalam bahasa Jawa. Anda bisa menggunakan bahasa Scala untuk mengimplementasikan kode kueri yang bagus dan menggunakan biner yang dihasilkan dari Java.
Jawaban:
Tidak ada yang seperti LINQ untuk Java.
...
Edit
Sekarang dengan Java 8 kami diperkenalkan dengan Stream API , ini adalah hal yang mirip ketika berhadapan dengan koleksi, tetapi tidak persis sama dengan Linq.
Jika ORM yang Anda cari, seperti Entity Framework, maka Anda dapat mencoba Hibernate
:-)
sumber
Ada solusi alternatif, Koollection .
Coolection tidak berpura-pura menjadi lambda baru, namun kami dikelilingi oleh proyek-proyek lama Jawa di mana lib ini akan membantu. Ini sangat sederhana untuk digunakan dan diperluas, hanya mencakup tindakan iterasi yang paling banyak digunakan pada koleksi, seperti itu:
sumber
Lambdas sekarang tersedia dalam Java 8 dalam bentuk JSR-335 - Ekspresi Lambda untuk Bahasa Pemrograman JavaTM
UPDATE : JDK8 sekarang telah dirilis yang berisi lambda proyek. Layak untuk mengambil salinan Java 8 in Action yang saat ini masih MEAP.
Bacalah artikel Brian Goetz yang berkaitan dengan lambdas untuk pemahaman yang layak tentang bagaimana lambdas diimplementasikan dalam JDK8 sementara juga mendapatkan pemahaman tentang stream, iterasi internal, hubungan pendek dan referensi konstruktor .. Juga periksa JSR di atas untuk mendapatkan contoh lebih lanjut .
Saya telah menulis sebuah blog tentang beberapa keuntungan menggunakan lambdas di JDK8 yang disebut The Power of the Arrow , juga NetBeans 8 memiliki dukungan besar untuk mengkonversi konstruk ke JDK8 yang saya juga blogging tentang Migrasi ke JDK 8 dengan NetBeans .
sumber
Anda dapat memilih item dalam koleksi (dan banyak lagi) dengan cara yang lebih mudah dibaca dengan menggunakan perpustakaan lambdaj
https://code.google.com/archive/p/lambdaj/
Ini memiliki beberapa keunggulan dibandingkan perpustakaan Quaere karena tidak menggunakan string ajaib, itu benar-benar tipe aman dan menurut saya itu menawarkan DSL yang lebih mudah dibaca.
sumber
Anda tidak akan menemukan padanan LINQ kecuali Anda menggunakan javacc untuk membuat padanan Anda sendiri.
Sampai hari itu ketika seseorang menemukan cara yang layak untuk melakukannya, ada beberapa alternatif yang baik, seperti
sumber
LINQ ke Objek - JAVA 8 telah menambahkan API Stream yang menambahkan dukungan untuk operasi gaya fungsional pada aliran nilai:
Paket java.util.stream
Java 8 Dijelaskan: Menerapkan Koleksi Lambdas ke Java
LINQ ke SQL / NHibernate / dll. (query database) - Salah satu opsi adalah menggunakan JINQ yang juga menggunakan fitur JAVA 8 baru dan dirilis pada 26 Februari 2014 di Github: https://github.com/my2iu/Jinq
Situs proyek JINQ: http://www.jinq.org/
sumber
Ada proyek yang disebut quaere .
Ini adalah kerangka kerja Java yang menambahkan kemampuan untuk meminta koleksi.
Catatan: Menurut penulis, proyek tidak dipertahankan lagi.
sumber
from x in xs select x
dan menemukan jawabannya (tidak).Ada banyak padanan LINQ untuk Java, lihat di sini untuk perbandingan.
Untuk kerangka kerja gaya Quaere / LINQ yang aman, coba gunakan Querydsl . Querydsl mendukung JPA / Hibernate, JDO, SQL dan Java Collections.
Saya adalah pengelola Querydsl, jadi jawaban ini bias.
sumber
Anda dapat menggunakan scala, ini mirip dengan sintaks dan sebenarnya mungkin lebih kuat daripada LINQ.
sumber
Seperti pada 2014, saya akhirnya bisa mengatakan bahwa LINQ akhirnya ada di java 8. Jadi tidak perlu mencari alternatif LINQ lagi.
sumber
Sekarang Java 8 mendukung lambdas, dimungkinkan untuk membuat API Java yang sangat mirip dengan LINQ.
Jinq adalah salah satu pustaka gaya LINQ baru untuk Java.
Saya adalah pengembang perpustakaan ini. Ini didasarkan pada lima tahun penelitian tentang penggunaan analisis bytecode untuk menerjemahkan Java ke permintaan basis data. Mirip dengan bagaimana C # D-LINQ adalah lapisan permintaan yang duduk di atas Entity Framework, Jinq dapat bertindak sebagai lapisan permintaan yang berada di atas JPA atau jOOQ. Ini memiliki dukungan untuk agregasi, grup, dan subkueri. Bahkan Erik Meijer (pencipta LINQ) telah mengakui Jinq .
sumber
Lihat SBQL4J . Ini adalah jenis bahasa query kuat yang aman yang terintegrasi dengan Java. Mengizinkan menulis kueri yang rumit dan berlipat ganda. Ada banyak operator, metode Java dapat dipanggil dalam permintaan sehingga sebagai konstruktor. Permintaan diterjemahkan ke kode Java murni (tidak ada refleksi saat runtime) sehingga eksekusi sangat cepat.
EDIT: Yah, sejauh ini SBQL4J itu adalah ekstensi HANYA ke bahasa Java yang memberikan kemampuan query yang mirip dengan LINQ. Ada beberapa proyek menarik seperti Quaere dan JaQue tetapi mereka hanya API, bukan ekstensi sintaksis / semantik dengan keamanan tipe kuat dalam waktu kompilasi.
sumber
Java LINQ untuk implementasi SQL . Menyediakan integrasi bahasa lengkap dan set fitur yang lebih besar dibandingkan dengan .NET LINQ.
sumber
Saya mencoba jambu-perpustakaan dari google. Ini memiliki
FluentIterable
yang saya pikir dekat dengan LINQ. Juga lihat FunctionalExplained .Tampaknya menjadi perpustakaan yang luas untuk Jawa. Tentu saja tidak sesingkat LINQ tetapi terlihat menarik.
sumber
https://code.google.com/p/joquery/
Mendukung berbagai kemungkinan,
Koleksi yang diberikan,
dari jenis,
Saring
Java 7
Java 8
Juga,
Penyortiran (juga tersedia untuk Java 7)
Pengelompokan (juga tersedia untuk Java 7)
Bergabung (juga tersedia untuk Java 7)
Diberikan,
Dapat Bergabung seperti,
Ekspresi
sumber
Anda dapat mencoba koleksi saya CollectionsQuery . Hal ini memungkinkan untuk menjalankan LINQ seperti kueri atas koleksi objek. Anda harus melewati predikat, seperti di LINQ. Jika Anda menggunakan java6 / 7 daripada Anda harus menggunakan sintaks lama dengan Antarmuka:
Anda juga dapat menggunakannya di Java8, atau di java lama dengan RetroLambda dan plugin gradle , maka Anda akan memiliki sintaks mewah baru:
Jika Anda perlu menjalankan query DB, daripada yang dapat Anda lihat di JINQ, seperti yang disebutkan di atas, tetapi tidak dapat di-porting kembali oleh RetroLambda, lakukan penggunaan lambdas berseri.
sumber
Hanya untuk menambahkan alternatif lain: Java 6 memang memiliki solusi untuk query database tipe-aman menggunakan paket javax.persistence.criteria .
Meskipun saya harus mengatakan bahwa ini bukan LINQ, karena dengan LINQ Anda dapat meminta setiap IEnumerable.
sumber
Ada perpustakaan yang sangat bagus yang dapat Anda gunakan untuk ini.
Terletak di sini: https://github.com/nicholas22/jpropel-light
Lambdas tidak akan tersedia sampai Java 8, jadi menggunakannya sedikit berbeda dan tidak terasa alami.
sumber
Kedengarannya seperti Linq yang dibicarakan semua orang di sini hanyalah LinqToObjects. Yang saya percaya hanya menawarkan fungsionalitas yang sudah dapat dicapai hari ini di Jawa, tetapi dengan sintaks yang benar-benar jelek.
Apa yang saya lihat sebagai kekuatan sebenarnya dari Linq di .Net adalah bahwa ekspresi lambda dapat digunakan dalam konteks yang membutuhkan delegasi atau ekspresi dan kemudian akan dikompilasi ke dalam bentuk yang sesuai. Inilah yang memungkinkan hal-hal seperti LinqToSql (atau apa pun selain LinqToObjects) berfungsi, dan memungkinkan mereka memiliki sintaksis yang identik dengan LinqToObjects.
Sepertinya semua proyek yang disebutkan di atas hanya menawarkan kemampuan LinqToObjects. Yang membuat saya hal bahwa fungsi tipe LinqToSql tidak di cakrawala untuk Jawa.
sumber
Untuk koleksi fungsional dasar, Java 8 memiliki built-in, sebagian besar bahasa JVM non-Java utama memilikinya built-in (Scala, Clojure, dll), dan Anda bisa menambahkan libs untuk versi Java yang lebih lama.
Untuk akses terintegrasi bahasa penuh ke database SQL, Scala (berjalan pada JVM) memiliki Slick
sumber
Untuk LINQ (LINQ to Objects), Java 8 akan memiliki sesuatu yang setara, lihat Project Lambda .
Ini memiliki Enumerable's LINQ untuk ekstensi Objects seperti barang . Tetapi untuk hal-hal LINQ yang lebih rumit seperti Ekspresi dan ExpressionTree (ini diperlukan untuk LINQ ke SQL dan penyedia LINQ lainnya jika mereka ingin memberikan sesuatu yang dioptimalkan dan nyata), belum ada yang setara tapi mungkin kita akan melihat itu di masa depan :)
Tapi saya tidak berpikir akan ada sesuatu seperti pertanyaan deklaratif di Jawa di masa depan
sumber
Tidak ada fitur seperti itu di java. Dengan menggunakan API lain Anda akan mendapatkan fitur ini. Seperti misalkan kita memiliki Obyek hewan yang berisi nama dan id. Kami memiliki objek daftar yang memiliki objek hewan. Sekarang jika kita ingin mendapatkan semua nama hewan yang berisi 'o' dari daftar objek. kita bisa menulis kueri berikut
from(animals).where("getName", contains("o")).all();
Pernyataan Query di atas akan daftar binatang yang berisi alfabet 'o' dalam nama mereka. Informasi lebih lanjut silakan kunjungi blog berikut. http://javaworldwide.blogspot.in/2012/09/linq-in-java.html
sumber
Lihat mungil-q . (Perhatikan bahwa saat ini Anda tidak dapat mengunduhnya.)
Berikut ini contoh yang menyesuaikan tautan di atas:
sumber
JaQu adalah padanan LINQ untuk Java. Meskipun dikembangkan untuk basis data H2, ia harus bekerja untuk basis data apa pun karena menggunakan JDBC.
sumber
Mungkin bukan jawaban yang Anda harapkan, tetapi jika beberapa bagian dari kode Anda memerlukan pekerjaan berat pada koleksi (pencarian, pengurutan, pemfilteran, transformasi, analisis), Anda dapat mempertimbangkan untuk menulis beberapa kelas di Clojure atau Scala .
Karena sifatnya yang fungsional, bekerja dengan koleksi adalah yang terbaik. Saya tidak punya banyak pengalaman dengan Scala, tetapi dengan Clojure Anda mungkin akan menemukan Linq yang lebih kuat di ujung jari Anda dan setelah dikompilasi, kelas yang Anda hasilkan akan berintegrasi mulus dengan sisa basis kode.
sumber
Seorang pengguna anonim menyebutkan satu lagi, Diting :
sumber
Scala. Sekarang saya membacanya, dan menemukannya seperti LINQ tetapi lebih sederhana dan lebih tidak dapat dibaca. tapi scala bisa dijalankan di linux, ya? csharp butuh mono.
sumber
Ada bahasa pemrograman Pizza (ekstensi Java) dan Anda harus melihatnya. - Menggunakan konsep "antarmuka lancar" untuk meminta data dengan cara deklaratif dan yang pada prinsipnya identik dengan LINQ tanpa ekspresi permintaan (http://en.wikipedia.org/wiki/Pizza_programming_language). Namun sayang itu tidak dikejar, tetapi itu akan menjadi salah satu cara untuk mendapatkan sesuatu yang mirip dengan LINQ ke Jawa.
sumber
Tidak ada yang setara dengan LINQ untuk Java. Tetapi ada beberapa API eksternal yang terlihat seperti LINQ seperti https://github.com/nicholas22/jpropel-light , https://code.google.com/p/jaque/
sumber
Anda dapat mencoba perpustakaan ini: https://code.google.com/p/qood/
Berikut beberapa alasan untuk menggunakannya:
sumber