LINQ와 동등한 Java는 무엇입니까? [닫은]


820

LINQ와 동등한 Java는 무엇입니까?


4
그것들은 LINQ to SQL로 보입니다.
SLaks

8
이것을 확인하십시오 : github.com/nicholas22/jpropel-light, 실제 예 : new String [] { "james", "john", "john", "eddie"} .where (startsWith ( "j")). toList ().뚜렷한();
NT_

1
Java ppl은 여전히 ​​Linq에 의해 해결 될 수있는 여러 명령문과 foreach 루프를 사용합니다.
om471987

1
전체 LINQ API가 포함 된 Scala의 경우 : github.com/nicholas22/propelS
Scooterville

4
@craastad .NET 녀석은 이제 Java 세계에 주로 갇혀 있으므로 고통을 느낍니다. 스칼라를 이해해야합니다-LINQ의 쿼리 구문과 동일하지는 않지만 많은 동일한 상황에서 유용함), 통합 유형 시스템, 유형 유추, 일반적인 유형 삭제를위한 편리한 해결 방법 ... 모두 JVM에서 실행되며 Java와 상호 운용됩니다. 또한 패턴 일치, 옵션 유형 등과 같은 다른 기능적 장점도 있습니다.
Tim Goodman

답변:


808

LINQ for Java와 같은 것은 없습니다.

...

편집하다

이제 Java 8에서는 Stream API를 소개합니다. 이것은 컬렉션을 다룰 때와 비슷한 종류이지만 Linq와는 다릅니다.

Entity Framework와 같은 ORM이라면 Hibernate 를 사용해 볼 수 있습니다.

:-)


9
계획에 뭔가가 있습니까? 언어에 통합? JCP 번호입니까? 등
Cheeso

6
LINQ sooo가 멋진 이유는 언어와 컴파일러에 얼마나 깊이 통합되어 있는가하는 것입니다
AgileJon

11
죄송합니다. '매우 진실'은 280Z28을 의미했습니다. JCP가 있는지 모르겠습니다. LINQ는 JCP가 숨을 참지 않을 때의 속도를 고려할 때 C # 언어를 몇 가지 변경해야했습니다.
AgileJon

12
이것은 정확하지 않습니다. 참조 : stackoverflow.com/questions/10879761/...
Scooterville

23
LINQ는 구현이 아닌 사양입니다 ... Lambda 표현식은 LINQ의 일부입니다. LINQ를 Java로 이식하려는 모든 프로젝트는 구체적인 시나리오 (SQL, Objects ...)에 대한 구현이지만 LINQ의 주요 목표는 코드에 언어 쿼리 통합입니다. 이로 인해 현재로서는 대안으로 간주 될 수있는 실질적인 대안도없고 초기도 없습니다.
sesispla

154

다른 솔루션 인 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();

7
열 이름의 문자열로, 컴파일러와 IDE 자동 완성이 오타를 방지하지 못하고 리팩토링이 어렵다는 것을 의미합니다. 그것을 바꿀 계획이 있습니까?
Ekevoo

2
안녕하세요, Ekevoo. 나는 그것이 끔찍할 것이라고 생각하고 언젠가 그렇게하려고했습니다. 그러나 현재 Java 8에서 Coollection은 더 이상 사용되지 않는 라이브러리입니다. 아마도 가장 오래된 프로젝트에 유용 할 것입니다 ... 어떻게 생각하십니까?
19WAS85

1
@WagnerAndrade 마지막 커밋은 5-6 년 전입니다. 기능이 Java 8로 대체되었다고 가정합니까? 또한, 매우 멋진 이름 :)
Abdul

145

람다는 이제 JSR-335-JavaTM 프로그래밍 언어를위한 람다 식 의 형태로 Java 8에서 사용 가능합니다.

업데이트 : JDK8이 릴리스 되어 프로젝트 람다가 포함되어 있습니다. 현재 여전히 MEAP 에서 Java 8 의 사본을 가져 오는 것이 좋습니다.

스트림, 내부 반복, 단락 및 생성자 참조에 대한 이해를 얻는 동시에 JDK8 내에서 람다가 어떻게 구현되는지에 대한 적절한 이해를 위해 람다와 관련된 Brian Goetz 기사를 읽으십시오 . 또한 JSR을 확인하여 추가 예제를 얻으십시오. .

필자는 JDK8에서 람다를 사용하여 얻을 수있는 장점 인 The Power of the Arrow 에 대한 블로그를 작성했습니다 . 또한 NetBeans 8 은 JDK8로 구문을 변환하는 데 큰 도움을 주며 NetBeans를 사용하여 JDK 8로 마이그레이션에 대해 블로그를 작성했습니다 .


람다는 Java 7에도 예정되어 있지 않습니까? 그것에 무슨 일이 있었는데?
BlueRaja-대니 Pflughoeft

7
오라클은 썬 (뺨에 혀)을 구입했습니다. Java 7은 너무 오래 (5 년) 걸렸으므로 람다는 짧은 목록을 놓쳤습니다. 이는 대중에게 다소 실망 스럽습니다. 오라클은 공을 잡는 것처럼 보이며 내년 10 월 8 일에 Java를 계획하고 있다고 생각합니다.
Brett Ryan

1
Lambda상태가 다시 한 번 업데이트되어 스트림, 내부 반복, 단락 및 생성자 참조가 포함됩니다. 새 문서를 모두 읽어 보시기 바랍니다.
Brett Ryan

6
람다 식은 LINQ의 일부입니다.
sesispla

4
@ NeWNeO, C #에서 쿼리 언어를 언급하는 경우 Java에 오지 않을 것이지만 경험상 가장 숙련 된 C # 개발자는 쿼리 언어보다 람다 구문을 선호합니다. 그러나 예를 들어 LINQ-to-Entities를 참조하는 경우 java의 람다 가이 기능을 가능하게한다는 것을 알 수 있습니다. 방어자 메소드 와 같이이를 가능하게하기 위해 Java 8에 더 많은 것들이 있습니다 .
Brett Ryan

119

lambdaj 라이브러리를 사용하여 더 읽기 쉬운 방식으로 컬렉션의 항목 등을 선택할 수 있습니다

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

그것은 마법의 문자열을 사용하지 않기 때문에 Quaere 라이브러리에 비해 몇 가지 장점이 있으며, 완전히 안전합니다. 제 생각에는 더 읽기 쉬운 DSL을 제공합니다.


6
이것은 좋지만 쿼리를 작성하고 다시 실행하는 것과는 거리가 멀다. sql, xml, collection 등
bytebender

안드로이드 프로젝트의 사용자 정의 클래스에서 lambdaj select를 사용할 때 java.lang.ExceptionInInitializerError가 발생하는 이유는 무엇입니까?
topwik

1
+1 이것은 SQL / XML에 신경 쓰지 않고 컬렉션에 더 쉽게 액세스하기를 원하는 사람들에게 정말 좋습니다.
ashes999

101

javacc 를 사용하여 고유 한 항목 을 작성 하지 않으면 LINQ 항목을 찾을 수 없습니다 .

누군가가 그렇게 할 수있는 실용적인 방법을 찾을 때까지 다음과 같은 좋은 대안이 있습니다.


github.com/TrigerSoft/jaque는이 방법을 찾아 표현식 트리를 만들 수 있습니다. Java 8 Lambdas와 결합하여 모든 LINQ 용량을 .Net에서와 동일한 노력으로 구현할 수 있습니다.
Konstantin Triger

비교를 위해이 답변을 참조하십시오 : stackoverflow.com/questions/25989449/…
Konstantin Triger

49

LINQ to Objects -JAVA 8에는 값 스트림에서 기능 스타일 작업을 지원하는 Stream API가 추가되었습니다.

패키지 java.util.stream

Java 8 설명 : Java 콜렉션에 Lambdas 적용

LINQ to SQL / NHibernate 등 (데이터베이스 쿼리) -하나의 옵션은 새로운 JAVA 8 기능을 사용하고 2014 년 2 월 26 일 Github에서 릴리스 된 JINQ를 사용하는 것입니다 : https://github.com/my2iu/Jinq

Jinq는 개발자에게 Java로 데이터베이스 쿼리를 작성하는 쉽고 자연스러운 방법을 제공합니다. 컬렉션에 저장된 일반 Java 객체처럼 데이터베이스 데이터를 처리 할 수 ​​있습니다. 일반적인 Java 명령을 사용하여 반복하고 필터링 할 수 있으며 모든 코드가 자동으로 최적화 된 데이터베이스 쿼리로 변환됩니다. 마지막으로 LINQ 스타일 쿼리를 Java에 사용할 수 있습니다!

JINQ 프로젝트 사이트 : http://www.jinq.org/


Stream API가 LINQ에 가장 가까운 경우에도 독자가 귀하의 답변에주의를 기울이지 않은 이유를 잘 모릅니다!
Rafid

3
Streams API는 LINQ에 비해 농담입니다.
Andrei Rînea

1
미안하다, 무례하다는 의미는 아니다. 스트림 API로 머리를 꺾은 후 LINQ와 동등한 것을 찾고있었습니다. 나는 단지 그것이 동등한 것이 아니라고 말하고 싶었습니다.
Andrei Rînea

1
@ AndreiRînea LINQ 공급자 (LINQ to XML, LINQ to JSON, LINQ to NHibernate 등)를 찾고 있습니까?
Răzvan Flavius ​​Panda

2
필요한 것은 컬렉션을 그룹화하고 최대한 활용하는 수단이었습니다. 결국에는 많은 노력과 코드로 성공했습니다.
Andrei Rînea

29

quaere 라는 프로젝트가 있습니다 .

컬렉션을 쿼리하는 기능을 추가하는 Java 프레임 워크입니다.

참고 : 저자에 따르면 프로젝트는 더 이상 유지되지 않습니다.


2
Quaere는 LINQ가 제공하는 것의 일부를 제공하는 것처럼 보이지만 문제는 '동등한 것'입니다.
AgileJon

6
따라서 직접적으로 동등한 것이 아니라면 LINQ 와 같은 것 입니까? 그건 적어도 도움이 소리
브라이언 애그뉴에게

3
@AgileJon : 만약 그가 동등한 것을 의미한다면, 그는 묻지 않았을 것입니다. 그는 입력 from x in xs select x하고 대답을 찾을 수있었습니다 (아니요).
kizzx2

18

Java와 동등한 LINQ가 많이 있습니다 . 비교를 위해 여기 를 참조 하십시오 .

형식이 안전한 Quaere / LINQ 스타일 프레임 워크의 경우 Querydsl 사용을 고려 하십시오 . Querydsl은 JPA / Hibernate, JDO, SQL 및 Java Collection을 지원합니다.

나는 Querydsl의 관리자 이므로이 대답은 편향되어 있습니다.


6
"유사한 프레임 워크"링크가 죽었습니다. 여전히 동등한 페이지가 있습니까?
Lukas Eder

우리는 언제 QueryDSL 서적을 얻을 수 있습니까? 아니면 저렴한 교육 옵션? 지원 링크 404
kervin

16

스칼라를 사용할 수 있습니다. 구문과 비슷하며 실제로 linq보다 더 강력합니다.


1
Esp. 스칼라의 "이해를 위해".
니코

10

2014 년에 마침내 LINQ가 Java 8에 마침내 있다고 말할 수 있으므로 더 이상 LINQ의 대안을 찾을 필요가 없습니다.


9

Java 8은 람다를 지원하므로 LINQ와 매우 유사한 Java API를 작성할 수 있습니다.

Jinq 는 Java를위한 이러한 새로운 LINQ 스타일 라이브러리 중 하나입니다.

이 라이브러리의 개발자입니다. 바이트 코드 분석을 사용하여 Java를 데이터베이스 쿼리로 변환하는 것에 대한 5 년간의 연구를 기반으로합니다. C #의 D-LINQ가 Entity Framework 위에있는 쿼리 계층 인 방법과 유사하게 Jinq는 JPA 또는 jOOQ 위에있는 쿼리 계층으로 작동 할 수 있습니다. 집계, 그룹 및 하위 쿼리를 지원합니다. LINQ의 제작자 인 Erik Meijer조차도 Jinq인정했습니다 .


8

SBQL4J를 참조하십시오 . Java와 통합 된 형식에 안전한 강력한 쿼리 언어입니다. 복잡하고 여러 번 중첩 된 쿼리를 작성할 수 있습니다. 많은 연산자가 있으며 생성자로서 쿼리 내에서 Java 메소드를 호출 할 수 있습니다. 쿼리는 순수 Java 코드로 변환되므로 (런타임에는 반영되지 않음) 실행 속도가 매우 빠릅니다.

편집 : 글쎄, 지금까지 SBQL4J는 LINQ와 유사한 쿼리 기능을 제공하는 Java 언어의 유일한 확장입니다. Quaere 및 JaQue와 같은 흥미로운 프로젝트가 있지만 컴파일 시간에 강력한 유형 안전성을 갖춘 구문 / 의미 확장이 아닌 API 일뿐입니다.


6
프로젝트에서 자신의 역할을 언급 할 수 있습니다.
Thorbjørn Ravn Andersen


7

Google에서 구아바 라이브러리 를 사용해 보았습니다 . 그것은이 FluentIterable내가 가까이 LINQ로 생각하는가. FunctionalExplained 도 참조하십시오 .

List<String> parts = new ArrayList<String>();  // add parts to the collection.    
FluentIterable<Integer> partsStartingA = 
    FluentIterable.from(parts).filter(new Predicate<String>() {
        @Override
        public boolean apply(final String input) {
            return input.startsWith("a");
        }
    }).transform(new Function<String, Integer>() {
        @Override
        public Integer apply(final String input) {
            return input.length();
        }
    });

Java를위한 광범위한 라이브러리 인 것 같습니다. 확실히 LINQ만큼 간결하지는 않지만 흥미로워 보입니다.


7

https://code.google.com/p/joquery/

다양한 가능성을 지원합니다.

주어진 컬렉션,

Collection<Dto> testList = new ArrayList<>();

유형의

class Dto
{
    private int id;
    private String text;

    public int getId()
    {
        return id;
    }

    public int getText()
    {
        return text;
    }
}

필터

자바 7

Filter<Dto> query = CQ.<Dto>filter(testList)
    .where()
    .property("id").eq().value(1);
Collection<Dto> filtered = query.list();

자바 8

Filter<Dto> query = CQ.<Dto>filter(testList)
    .where()
    .property(Dto::getId)
    .eq().value(1);
Collection<Dto> filtered = query.list();

또한,

Filter<Dto> query = CQ.<Dto>filter()
        .from(testList)
        .where()
        .property(Dto::getId).between().value(1).value(2)
        .and()
        .property(Dto::grtText).in().value(new string[]{"a","b"});

정렬 (Java 7에도 사용 가능)

Filter<Dto> query = CQ.<Dto>filter(testList)
        .orderBy()
        .property(Dto::getId)
        .property(Dto::getName)
    Collection<Dto> sorted = query.list();

그룹화 (Java 7에도 사용 가능)

GroupQuery<Integer,Dto> query = CQ.<Dto,Dto>query(testList)
        .group()
        .groupBy(Dto::getId)
    Collection<Grouping<Integer,Dto>> grouped = query.list();

조인 (Java 7에서도 사용 가능)

주어진,

class LeftDto
{
    private int id;
    private String text;

    public int getId()
    {
        return id;
    }

    public int getText()
    {
        return text;
    }
}

class RightDto
{
    private int id;
    private int leftId;
    private String text;

    public int getId()
    {
        return id;
    }

    public int getLeftId()
        {
            return leftId;
        }

    public int getText()
    {
        return text;
    }
}

class JoinedDto
{
    private int leftId;
    private int rightId;
    private String text;

    public JoinedDto(int leftId,int rightId,String text)
    {
        this.leftId = leftId;
        this.rightId = rightId;
        this.text = text;
    }

    public int getLeftId()
    {
        return leftId;
    }

    public int getRightId()
        {
            return rightId;
        }

    public int getText()
    {
        return text;
    }
}

Collection<LeftDto> leftList = new ArrayList<>();

Collection<RightDto> rightList = new ArrayList<>();

다음과 같이 참여할 수 있습니다.

Collection<JoinedDto> results = CQ.<LeftDto, LeftDto>query().from(leftList)
                .<RightDto, JoinedDto>innerJoin(CQ.<RightDto, RightDto>query().from(rightList))
                .on(LeftFyo::getId, RightDto::getLeftId)
                .transformDirect(selection ->  new JoinedDto(selection.getLeft().getText()
                                                     , selection.getLeft().getId()
                                                     , selection.getRight().getId())
                                 )
                .list();

표현

Filter<Dto> query = CQ.<Dto>filter()
    .from(testList)
    .where()
    .exec(s -> s.getId() + 1).eq().value(2);

5

내 라이브러리 CollectionsQuery를 사용해 볼 수 있습니다 . 객체 컬렉션에 대한 쿼리처럼 LINQ를 실행할 수 있습니다. LINQ에서와 같이 술어를 전달해야합니다. java6 / 7을 사용하는 경우 인터페이스에서 이전 구문을 사용해야하는 것보다 :

List<String> names = Queryable.from(people)
                                    .filter(new Predicate<Person>() {
                                                public boolean filter(Person p) {
                                                    return p.age>20;
                                                }
                                            })
                                    .map   (new Converter<Person,String>() {
                                                public Integer convert(Person p) {
                                                    return p.name;
                                                }
                                            })
                                    .toList();

또한 Java8, 또는 오래된 자바에서 사용할 수 RetroLambda 과 그것의 Gradle을 플러그인 , 당신은 새로운 멋진 구문을해야합니다 :

List<String> names = Queryable.from(people)
                                    .filter(p->p.age>20)
                                    .map   (p->p.name)
                                    .toList();

DB 쿼리를 실행 해야하는 경우 위에서 언급 한 것처럼 JINQ에서 볼 수있는 것보다 직렬 람다를 사용하여 RetroLambda에 의해 백 포트 될 수 없습니다.



4

또 다른 대안을 추가하려면 Java 6에는 javax.persistence.criteria 패키지를 사용하여 형식이 안전한 데이터베이스 쿼리를위한 솔루션이 있습니다 .

LINQ를 사용하면 IEnumerable을 쿼리 할 수 ​​있기 때문에 이것이 실제로 LINQ가 아니라고 말해야합니다.


네, JPA API입니다. LINQ와는 거리가 멀지 만 아무것도 아닌 것보다 낫습니다. 그리고 Hibernate Criteria API에 기반을 둔다고 말할 수 있습니다. 참조 : docs.jboss.org/hibernate/core/3.6/reference/en-US/html/…
Hendy Irawan

4

이를 위해 사용할 수있는 매우 좋은 라이브러리가 있습니다.

여기에 위치 : https://github.com/nicholas22/jpropel-light

람다는 Java 8까지는 사용할 수 없으므로 사용하는 것은 조금 다르며 자연스럽지 않습니다.


4

모두가 여기에서 말하는 Linq와 같은 소리는 LinqToObjects입니다. 나는 오늘날 Java로 이미 달성 할 수있는 기능 만 제공하지만 실제로는 추악한 구문을 제공한다고 생각합니다.

.Net에서 Linq의 진정한 힘으로 보는 것은 람다식이 위임 또는식이 필요한 컨텍스트에서 사용될 수 있으며 적절한 형식으로 컴파일된다는 것입니다. 이것은 LinqToSql (또는 LinqToObjects 이외의 것)과 같은 것들이 작동하도록하고 LinqToObjects와 동일한 구문을 갖도록합니다.

위에서 언급 한 모든 프로젝트가 LinqToObjects의 기능 만 제공하는 것 같습니다. LinqToSql 유형의 기능이 Java의 지평선에 있지 않다는 것을 알 수 있습니다.


4

기본 기능 모음의 경우 Java 8에 내장되어 있고 Java 이외의 주요 JVM 언어의 대부분에는 내장되어 있으며 (Scala, Clojure 등) 이전 Java 버전의 라이브러리에 추가 할 수 있습니다.

SQL 데이터베이스에 대한 전체 언어 통합 액세스를 위해 Scala (JVM에서 실행)에는 Slick이 있습니다.


3

LINQ (LINQ to Objects)의 경우 Java 8에는 동등한 기능이 있습니다 ( Project Lambda 참조) .

그것은 Enumerable에서의이 객체의 확장에 LINQ 와 같은 거즈 . 그러나 ExpressionExpressionTree 와 같은 더 복잡한 LINQ의 경우 (LINQ to SQL 및 기타 LINQ 공급자가 최적화되고 실제적인 것을 제공하려는 경우 필요함) 아직 이에 상응하는 것은 아니지만 앞으로는 다음과 같이 보일 것입니다.

그러나 앞으로 Java에 대한 선언 쿼리와 같은 것이 없을 것이라고 생각합니다.


2

자바에는 그러한 기능이 없습니다. 다른 API를 사용하면이 기능을 사용할 수 있습니다. 이름과 아이디가 포함 된 동물 객체가 있다고 가정합니다. 동물 대상을 가지는리스트 대상이 있습니다. 이제리스트 객체에서 'o'를 포함하는 모든 동물 이름을 가져 오려면 우리는 다음과 같은 쿼리를 작성할 수 있습니다

from(animals).where("getName", contains("o")).all();

위의 Query 문에는 이름에 'o'알파벳이 포함 된 동물 목록이 표시됩니다. 자세한 내용은 다음 블로그를 참조하십시오. http://javaworldwide.blogspot.in/2012/09/linq-in-java.html


2

tiny-q를 확인하십시오 . (현재 다운로드 할 수 없습니다.)

위의 링크를 수정 한 예는 다음과 같습니다.

먼저 몇 가지 데이터를 수집해야합니다. 문자열 집합을 가정 해 봅시다.

String[] strings = { "bla", "mla", "bura", "bala", "mura", "buma" };

이제 "b"로 시작하는 문자열 만 선택하려고합니다.

Query<String> stringsStartingWithB = new Query<String>(strings).where(
    new Query.Func<String, Boolean>(){
        public Boolean run(String in) {
            return in.startsWith("b");
        }
    }
);

복사 된 실제 데이터 나 이와 유사한 데이터는 없습니다. 반복을 시작하자마자 처리됩니다.

for(String string : stringsStartingWithB ) {
    System.out.println(string);
}

1

JaQu는 Java에 해당하는 LINQ입니다. H2 데이터베이스 용으로 개발되었지만 JDBC를 사용하므로 모든 데이터베이스에서 작동해야합니다.


1

원하는 답변이 아닐 수도 있지만 코드의 일부가 수집 (검색, 정렬, 필터링, 변환, 분석)에 대한 많은 작업이 필요한 경우 Clojure 또는 Scala로 일부 클래스를 작성하는 것을 고려할 수 있습니다 .

기능적 특성으로 인해 컬렉션 작업이 가장 좋습니다. Scala에 대한 경험이 많지 않지만 Clojure를 사용하면 손끝에서 더 강력한 Linq를 발견하고 한 번 컴파일하면 생성 한 클래스가 나머지 코드베이스와 완벽하게 통합됩니다.


1
Groovy 또는 jRuby는 또한 훨씬 더 기능적인 특성을 가지고 있기 때문에 실행 가능한 후보가 될 수 있습니다.
cdeszaq

1

익명의 사용자가 Diting :

Diting은 .NET의 Linq와 같은 익명 인터페이스와 체인 가능한 메소드를 통해 컬렉션에 쿼리 기능을 제공하는 클래스 라이브러리입니다. 정적 메소드를 사용하는 대부분의 다른 콜렉션 라이브러리와 달리 전체 콜렉션을 반복 해야하는 Diting은 핵심 Enumerable 클래스 whitch를 제공합니다.

지원되는 방법 : 첫 번째, firstOrDefault, groupBy, interset, join, last, lastOrDefault, ofType, orderBy, orderByDescending, reverse, select, selectMany, single, singleOrDefault, skip을 제외한 any, cast, contact, contains, count, distinct, elementAt , skipWhile, take, takeWhile, toArray, toArrayList, union, 여기서


1

Scala. 이제 나는 그것을 읽고, linq와 비슷하지만 더 간단하고 읽을 수 없다는 것을 알았습니다. 스칼라는 리눅스에서 실행할 수 있습니다. csharp는 모노가 필요합니다.


1
스칼라는 Java 런타임을 실행해야합니다. 설치하는 구성 요소에 따라 베어 Linux 설치에서 반드시 작동하지는 않습니다.
Rup

@Rup에는 GNU / Linux 용 JRE 가 완벽하게 있으며 Mono는 완전히 호환되는 .NET 구현 이 아닙니다 .
표시 이름

@Sarge 그것은 내 요점이 아니었지만 Mono는 LINQ를 충분히 실행합니다. 게다가, 리눅스를위한 마이크로 소프트 자체의 .Net Core가 있습니다.
Rup

Linux는 Windows 이외의 유일한 플랫폼이 아니며 JRE는 다양한 플랫폼에 존재합니다. 모노는 모든 것을 완전히 구현하지는 않습니다. 예를 들어 WPF가 없습니다.
표시 이름

0

프로그래밍 언어 피자 (자바 확장)가 있었고 살펴보아야합니다. - "유창한 인터페이스"개념을 사용하여 선언적인 방식으로 데이터를 쿼리하며 이는 원칙적으로 쿼리식이없는 LINQ와 동일합니다 (http://ko.wikipedia.org/wiki/Pizza_programming_language). 그러나 안타깝게도 LINQ와 비슷한 것을 Java로 가져 오는 방법 중 하나였습니다.


1
물론 "피자"라는 이름으로 만 추구되지는 않았습니다. Pizza의 제네릭은 GJ로 병합되어 Java 1.3 참조 컴파일러가되었습니다 (제네릭은 1.5까지 플래그 뒤에 숨겨져 있음). 그 동안 ... 나머지 아이디어와 몇 가지 추가 아이디어가 스칼라가되었습니다.
케빈 라이트

그 정보에 감사드립니다. 물론 스칼라는 좋은 지적입니다. 그러나 Java 언어로 통합되지 않은 이러한 기능. 스칼라 언어를 사용하여 멋진 쿼리 코드를 구현하고 결과 바이너리를 Java에서 사용할 수 있습니다.
Nico

또한 ONGL에서 볼 commons.apache.org/proper/commons-ognl 사용 중이고 아직 유지되고.
Nico


0

이 라이브러리를 사용해보십시오 : https://code.google.com/p/qood/

사용하는 몇 가지 이유는 다음과 같습니다.

  1. 경량 : 9 개의 공용 인터페이스 / 클래스 만 배울 수 있습니다.
  2. SQL과 같은 쿼리 : group-by, order-by, left join, formula 등을 지원합니다.
  3. 빅 데이터의 경우 : 힙 메모리 대신 파일 (QFS)을 사용하십시오.
  4. 객체 관계형 임피던스 불일치 를 해결하십시오 .
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.