Java 是否有任何有效的开源替代IBMpureQuery来查询内存集合?
我们是否有一些IBM pureQuery的开源替代品来查询Java集合框架的内存集合或复合Java对象?如我在评论中所述,我不能完全确定我是否理解你的问题:我不确定你是否在问pureQuery是否有OSS替代品,pureQuery是否可以在Java集合框架的内存DS上工作,或者你是否想要一个OSS aternative可以在内存集合上工作,特别是Java集合框架 但是,我会试试看 持久层查询语言/框架 如果您正在寻找一种开源软件,用于与持久层进行基于查询的交互,那么显而易见的解决方案非常简单:Java 是否有任何有效的开源替代IBMpureQuery来查询内存集合?,java,data-structures,collections,Java,Data Structures,Collections,我们是否有一些IBM pureQuery的开源替代品来查询Java集合框架的内存集合或复合Java对象?如我在评论中所述,我不能完全确定我是否理解你的问题:我不确定你是否在问pureQuery是否有OSS替代品,pureQuery是否可以在Java集合框架的内存DS上工作,或者你是否想要一个OSS aternative可以在内存集合上工作,特别是Java集合框架 但是,我会试试看 持久层查询语言/框架 如果您正在寻找一种开源软件,用于与持久层进行基于查询的交互,那么显而易见的解决方案非常简单:
- 这个,
- 这个,
- 这个
- 语言扩展:
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);
List<Product> products = getProductList(); List<Product> expensiveInStockProducts = #{ products where unitsInStock > 0 and unitPrice > 3.00 };
- ,对于使用XPath表达式的不同方法:
Address address = (Address)JXPathContext .newContext(vendor) .getValue("locations[address/zipCode='90210']/address");
- Java函数式编程库提供了类似的功能,因为它们允许您访问基本的函数构造
过滤器
,
映射
,
收集
,
转换
等。。。例如:
- :
Set strings=buildSetStrings(); 收集过滤器字符串= Collections2.filter(字符串、谓词.containsPattern(^J));
- :
Array a=Array(97,44,67,3,22,90,1,77,98,1078,6,64,6,79,42); 最终阵列b=a.滤波器(偶数);
- :
//具有正常接口: List BuyerSortedBages=排序( 提取( 选择(sales,have(on(Sale.class).getValue(),大于(50000))) ),on(Sale.class).getBuyer() ),在(Person.class.getAge())上; //使用流畅/可链接的界面: 列出买家SortedBages=带(销售) .retain(具有(on(Sale.class).getValue(),大于(50000))) .extract(在(Sale.class.getBuyer()上) .sort(在(Person.class.getAge()上);
- :
或者,您可能只是想在?以及支持索引和查询的CQEngine上查找本教程:
有关更多背景信息,请参阅类似问题:我不确定您是否询问是否有替代pureQuery的OSS,pureQuery是否可以在Java Collection Framework的内存DS上工作,或者您是否希望OSS aternative可以在内存集合上工作,具体包括Java collections Framework。谢谢!如果你能更新你的答案,那将是很酷的,因为它包含了许多看起来没有维护的项目。也许现在有一些新的选择?就像下面提到的引擎。。。
Address address = (Address)JXPathContext
.newContext(vendor)
.getValue("locations[address/zipCode='90210']/address");
Set<String> strings = buildSetStrings();
Collection<String> filteredStrings =
Collections2.filter(strings, Predicates.containsPattern("^J"));
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);
// 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());