Java sql风格的数组操作



不久前我有一个项目的想法,我打算编写一个Java库,允许使用SQL语法对数组进行排序和选择。

我的想法是你可以像这样从数组中选择:

int[] nums = new int[] { 0, 5, 7, 2, 4, 9, 3, 1, 6, 8 }
int result = select().from(nums).where("value > 2").and("value < 8").sort("ASC");

这将返回一个像这样的新数组:

{ 3, 4, 5, 6, 7 }

我还没有想过这么做的具体实现或原因,但我认为这将是一个非常有趣的尝试。

我的问题是,这样的事情真的存在吗?或者有什么特别的办法吗?

我也认为这可能是有用的Object数组,你可以选择多个字段,像这样:

select().from(array).where("Field1 = "+someValue).or("Field1 = "+anotherValue);

可能性是无穷无尽的。但是我不确定从哪里开始,或者更确切地说,如何开始实现这些方法。

这更像是一个"去哪里"而不是一个带答案的问题,所以任何帮助都将是有用的。

你正在寻找的是类似于c#中的LINQ的东西。

初学者可以参考这些链接

LINQ for Java tool

在Java中LINQ的等效是什么?

你可能还想看看c#中可用的lambda表达式。我不知道还能建议什么。

但是如果你试图在java中构建类似LINQ的东西,那么它有点复杂。您需要以面向对象的方式进行思考,以无缝地形成sql查询。如果是这样的话,那么答案是相当长的(或大err..)

你是对的,我认为这将是一个有趣的项目。

有很多方法可以做到这一点。一种方法是创建一个Query对象,通过依次调用这些方法来构建该对象。

所以像这样:

public class Query {
  public static Query select(String...fields){
    //code omitted
    return query;
  }
  public Query from(Collection<Object> collection){
    //code omitted
    return this;
  }
  public Query where(String field, Object value){
    //code omitted
    return this;
  }
}

那么你可以这样写:

Query.select("field1", "field2").from(myList)....

您需要跟踪在每个点选择了哪些值,以及它们的下一个条件是应该添加到它们(如or的情况)还是从它们中删除(如and的情况)。会有很多边缘情况。我的建议是从一些非常简单的东西开始,比如ints的例子,然后从那里开始工作。

当你开始做对象版本时,你需要使用反射来访问对象的字段。

一旦你这样做了,你可能想要考虑通过使用泛型来提高代码的类型安全性。

总而言之,一个有趣的项目有很多范围。然而,这感觉像是会有很多边缘情况的事情,所以值得仔细考虑一下设计,并且做一些单元测试也不是一个坏主意。

Java LINQ之类的东西?

嗯,有jxpath,它允许一个人在java集合上做xpath风格的查询,这就是你想要的。

jOOQ库具有与您所描述的查询类似的查询,但据我所知,它意味着在实际数据库上使用。

最新更新