在Java中重载addAll函数[重复]
Posted
技术标签:
【中文标题】在Java中重载addAll函数[重复]【英文标题】:Overload addAll function in Java [duplicate] 【发布时间】:2014-12-27 10:23:13 【问题描述】:我想将数组[] 转换为 ArrayList。在java中使用起来更简单
new ArrayList<Element>(Arrays.asList(array))
但是,如果我想在将 array 中的元素放入 ArrayList 之前对其进行一些完整性检查,该怎么办?例如
new ArrayList<Element>(Arrays.asList(array,Sanity.isNotNull))
即类似于 Comparator 的东西,只有当第二个参数中的函数对该元素为 true 时,才在 ArrayList 中添加一个元素。
我总是可以做一个 for 并自己添加元素,但是 Java 中有什么内置的吗?第二个问题:有没有办法重载addAll函数来实现上述目标?
【问题讨论】:
可能是Guava functional idioms,但 AFAIK 没有内部机制 @RC。我之前没有使用过番石榴的经验,所以无法对此发表评论。另外,我们的办公室还没有使用番石榴。我只是想知道这是否是香草 Java 版本的遗漏? 如果你想要一个现成的方法,那么你必须使用一些库,如 Apache Commons、Google 的 Guava 等。但如果你不(不能)使用一些库,那么你有自己实现过滤功能。 ***.com/questions/122105/… 保持简单,只需使用循环。 en.wikipedia.org/wiki/KISS_principle。拥有一个自定义的 addAll() 会在未来几年给维护带来麻烦。 @Lokesh 感谢您的链接 【参考方案1】:在 Java 8 中,您可以执行以下操作:
new ArrayList<Element>(Arrays.asList(array).stream()
.filter(elem -> /* condition on element that returns a boolean, i.e. "elem.age > 21" */ )
).collect(Collectors.toList());
【讨论】:
很棒的补充!感谢您的回答。但是我必须使用循环,因为我们目前使用的是 Java 7 只读流类。支持集合上的 map-reduce 真是太棒了。我对 Java 中的这一新增功能感到非常兴奋。 可以直接收藏到ArrayList
:[...].collect(Collectors.toCollection(ArrayList::new));
以上是关于在Java中重载addAll函数[重复]的主要内容,如果未能解决你的问题,请参考以下文章