我知道Collection框架允许创建“视图”,即Collection对象的轻量级“包装器”。
我特别感兴趣的是,给定一个列表,只返回满足某些条件的元素子集的视图。
基本上,我要模拟的是subList()方法的功能,只是不基于开始和结束索引,而是基于元素的一些参数。
我想到的第一个方法是简单地创建另一个列表,遍历第一个列表并检查每个元素……
虽然这实际上不是复制任何MyObject,而只是复制它们的引用,但我无论如何都会创建一个新的List对象,并增加它的开销。对不对?
有没有什么轻量级的方法可以做我需要的事情?
注意:我原来的清单是一个很大的收藏。
谢谢大家
发布于 2012-01-26 22:07:29
在Java语言中,您可以使用Guava集合轻松完成此操作(Collections2有一个filter方法http://docs.guava-libraries.googlecode.com/git-history/v11.0.1/javadoc/index.html)。
您还可以在groovy中使用findAll方法执行此操作,例如
myList.findAll { it.contains("aValue") }这些方法中的任何一个都会在幕后创建一个新的集合。所以他们只是在为你做迭代元素并检查它们的工作。创建一个新列表的开销很小(它只是实例化一个新对象)。
发布于 2012-01-26 22:07:17
I would anyways create a new List object, with its overhead我不明白你在这担心什么。查看List类中的source of ArrayList class甚至subList(int fromIndex, int toIndex)方法都会创建一个新的内部类(它是从List扩展而来的)。这实际上就是你在你的方法中要做的事情,比如创建一个新的列表实例,并将你匹配的元素的引用复制到其中。自定义方法或多或少将具有与subList方法相同的性能。
https://stackoverflow.com/questions/9019106
复制相似问题