Overload addAll function in Java
我想将数组[]转换为数组列表。在Java中使用起来更简单。
1
| new ArrayList <Element >(Arrays. asList(array )) |
但如果我想在将数组中的元素放入arraylist之前对它们进行一些健全性检查,该怎么办呢?例如
1
| new ArrayList <Element >(Arrays. asList(array,Sanity. isNotNull)) |
也就是说,类似于comparator的东西,只有当第二个参数中的函数对于该元素为true时,才在arraylist中添加元素。
我可以自己做一个Apple并添加元素,但是Java中有什么内置的吗?第二个问题:是否有一种方法可以重载addall函数来实现上述目标?
- 可能是番石榴的功能习语,但阿法克没有这方面的内在原因。
- @我在番石榴没有经验,所以不能对此发表评论。另外,我们办公室还没有用番石榴。我只是想知道这是否是香草爪哇版的小姐?
- 如果你想要一个现成的方法,那么你必须使用一些库,比如ApacheCommons、Google的guava等,但是如果你不使用(不能)一些库,那么你必须自己实现过滤功能。stackoverflow.com/questions/122105/&hellip;
- 保持简单,只需使用一个循环。en.wikipedia.org/wiki/kiss_原则。拥有一个定制的addall()会让一些人在未来的几年里感到维护上的头疼。
- @Lokesh谢谢你的链接
- "亚当,罗尔斯!但我真的相信在addall中过滤是非常有用的。add all已经提供了一个添加所有元素的选项,添加一个过滤器实际上会使它更有用,而不会损害下面接受的答案中所示的简单性。但是,是的!如果没有库,那么制作一个库就很难管理,循环就足够了。
- 我坚信这会损害AdDALL的语义,也许它应该是AdSub(),Java 8已经通过流提供了广泛的过滤。我认为核心集合API应该尽可能简单。
- @亚当,是的,现在我们有了流,不需要在add all中添加过滤器,否则在所有类似的函数中都需要类似的东西。
在Java 8中,你可以这样做:
1 2 3
| 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上。
- 只需阅读流类。支持地图减少收藏是一件了不起的事情。我对Java中的这种新添加感到非常兴奋。
- 你可以直接收进一个ArrayList:[...].collect(Collectors.toCollection(ArrayList::new));。