java - IBM purequery 是否有任何有效的开源替代方案来查询内存中的集合?

标签 java data-structures collections

我们是否有一些 IBM pureQuery 的开源替代品来查询 Java 集合框架的内存中集合或复合 Java 对象?

最佳答案

正如我在评论中提到的,我不完全确定我理解你的问题:我不确定你是否在问是否有 pureQuery 的 OSS 替代品以及 pureQuery 是否适用于 Java 集合框架的内存 DS ,如果您想要一个适用于内存集合的 OSS 替代方案,特别是 Java 集合框架。

但是,我会试一试...

持久层查询语言/框架

如果您正在寻找用于与持久层进行基于查询的交互的开源软件,显而易见的解决方案非常简单:

请注意,这些也可以用于内存数据库(如 H2 或 HSQLDb)。

集合查询语言/框架

但是,如果你想查询集合,有几个项目,比如:

  • the java Query Language (JQL)语言扩展:

    ArrayList<String> words = dict.getWords(Puzzle.MEDIUM);
    ArrayList<Integer> gaplengths = puzzle.getGapLengths();
    
    List<Object[]> matches = selectAll(
        String w : words, 
        Integer i : gaplengths | w.length() == i);
    
  • the Stack-Based Query Language for Java (sqbl4j)语言扩展:

    List<Product> products = getProductList();
    List<Product> expensiveInStockProducts = #{
        products 
        where unitsInStock > 0 and unitPrice > 3.00
    };
    
  • Java Objects SQL (JoSQL) :

    List myObjs = getMyObjects ();
    Query q = new Query ();
    q.parse ("SELECT * FROM java.io.File WHERE name LIKE '%.java'");
    QueryResults qr = q.execute (myObjs);
    List res = qr.getResults ();
    
  • jxpath ,对于使用 XPath 表达式的不同方法:

    Address address = (Address)JXPathContext
        .newContext(vendor)
        .getValue("locations[address/zipCode='90210']/address");
    
  • Java 的函数式编程库提供了类似的功能,因为它们使您可以访问基本的函数式构造 filtermapcollect, transform 等...例如,使用:

    • Google Guava :

      Set<String> strings = buildSetStrings();  
      Collection<String> filteredStrings =
          Collections2.filter(strings, Predicates.containsPattern("^J"));  
      
    • Functional Java :

      Array<Integer> a = array(97, 44, 67, 3, 22, 90, 1, 77, 98, 1078, 6, 64, 6, 79, 42);
      final Array<Integer> b = a.filter(even);
      
    • LambdaJ :

      // with normal interfaces:
      List<Person> buyersSortedByAges = sort(
          extract(
              select(sales, having(on(Sale.class).getValue(), greaterThan(50000)))
          ), on(Sale.class).getBuyer() 
      ), on(Person.class).getAge());
      
      // with fluent/chainable intefaces:
      List<Person> buyersSortedByAges = with(sales)
          .retain(having(on(Sale.class).getValue(), greaterThan(50000)))
          .extract(on(Sale.class).getBuyer())
          .sort(on(Person.class).getAge());
      

或者您可能只是在 querying in-memory collections with pureQuery 上寻找本教程?

关于java - IBM purequery 是否有任何有效的开源替代方案来查询内存中的集合?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10990632/

相关文章:

haskell - 具有惰性脊柱和严格叶子的数据结构示例

java - 如何创建 B+ 树数据结构

java - Java 中的高性能原始数组生成器

java - 如果 JTable 包含阿拉伯字符,如何强制它不反转文本?

java - System.arraycopy() 抛出越界异常

list - 如何使用 Scala 从列表列表创建列表?

python - Python 集合模块中的 defaultdict 真的比使用 setdefault 快吗?

java - 正则表达式,匹配非字符一次或多次

java - HOCON替换默认值

java - Collections.shuffle 是否保证结果不排序?