Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
java过滤对象列表的最佳方法_Java - Fatal编程技术网

java过滤对象列表的最佳方法

java过滤对象列表的最佳方法,java,Java,我有一个物品清单,比如说销售。我只想要其产品与另一个列表(例如saleProductList)中的产品匹配的销售对象 除了循环,还有更好的方法吗 如果您已经在使用Google的Guava库,它有一个方法,只返回与给定值匹配的集合中的项目 然而,这是否能回答您的问题取决于您避免循环的动机。由于Java集合没有内置此功能,所以唯一的方法是在某个级别上迭代所有元素。Guava在内部执行此操作,但它仍在执行与手动相同的循环,只是用了更好的API进行了修饰。您可以使用Apache commons库中的集合

我有一个物品清单,比如说销售。我只想要其产品与另一个列表(例如saleProductList)中的产品匹配的销售对象


除了循环,还有更好的方法吗

如果您已经在使用Google的Guava库,它有一个方法,只返回与给定值匹配的集合中的项目


然而,这是否能回答您的问题取决于您避免循环的动机。由于Java集合没有内置此功能,所以唯一的方法是在某个级别上迭代所有元素。Guava在内部执行此操作,但它仍在执行与手动相同的循环,只是用了更好的API进行了修饰。

您可以使用Apache commons库中的
集合
方法。然而,这些方法只是为您执行循环。当你试图做你需要的事情时,你不能真正地避免它。

有一些类似函数的替代方法,可以使你的代码简单易懂,但它们在内部可能需要遍历列表。但他们会懒散地执行过滤,如果客户机可能不总是使用这种过滤,这是很好的


检查筛选(…)方法是否适合您:

在某种程度上,不可避免地会涉及循环

如果两个数据结构都是列表,那么成本将与两个列表长度的乘积成比例。如果列表很大,这可能会非常昂贵


为了避免这种情况,一个或两个列表需要用某种数据结构表示,这种结构比简单的列表提供更快的查找速度。

我建议两种解决方案

  • 使用来自的谓词。
    可能存在不同的谓词。您可以将它们组合起来,创建非常复杂的过滤器

  • 读我的文章:, 搜索子标题“过滤器模式的实现”

  • 我希望这对你有帮助

    使用谷歌的:

    虽然这些确实为您提供了一个适当的列表,但它们会立即产生存储开销和迭代时间开销。如果您希望推迟该(“延迟”计算),则可以使用Iterable或迭代器进行串行访问:

    Iterable result3 = Iterables.filter(originalList,filterPredicate));  // Pangea's solution
    Iterator result4 = Iterators.filter(originalList.iterator(),filterPredicate));
    
    (我将类型参数化作为练习留给读者。)

    我修复并格式化了(断开的)链接。Javadoc方法链接包含需要转义的字符。此外,谷歌收藏现在是番石榴的一部分
    Iterable result3 = Iterables.filter(originalList,filterPredicate));  // Pangea's solution
    Iterator result4 = Iterators.filter(originalList.iterator(),filterPredicate));