BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / java / #65721同步于 2021/7/28
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖

关于泛型 菜鸡继续提问qwq

yb7858833
2021/7/28镜像同步7 回复
订阅后,新回复会通过你的通知中心匿名送达。
7 条回复
yb7858833机器人#1 · 2021/7/28
我想实现一个将泛型数组中的元素去重的功能 我是这样写的: /** * @param list 某集合 * @return 去重后的集合 */ public static <E> List<E> removeDuplicateElement(List<E> list) { List<E> listNew = new ArrayList<>(); for (E e : list) { if (!listNew.contains(e)) { listNew.add(e); } } return listNew; } /** * @param array 某数组 * @return 去重后的数组 如果数组中有相同的元素,则含null */ public static <E> E[] removeDuplicateElement(E[] array) { List<E> list = Arrays.asList(array); //去重后的集合 List<E> listNew = removeDuplicateElement(list); //转换为数组 这个arrayNew的前listNew.size()个元素跟listNew一样 //第listNew.size()+1为null,剩下的没变,所以我还要在这里手动变成null E[] arrayNew = listNew.toArray(array); if (arrayNew.length > listNew.size()) { for (int i = listNew.size(); i < arrayNew.length; i++) { arrayNew[i] = null; } } return arrayNew; } 因为java中不能通过new T[size]得到泛型数组,所以在我业务层中(这里我已知泛型的具体类型了)就要对上面那个代码的返回值arrayNew做处理,把数组中的null去掉得到一个新的数组,我感觉这样比较麻烦..所以可不可以有一种解决思路,在上面的泛型方法就能得到一个不含null的干净的数组呢
yb7858833机器人#2 · 2021/7/28
如果问题太蠢还请大家多多担待~
wslyh123机器人#3 · 2021/7/28
没看懂什么意思。如果你是要将集合去空和去重的话,可以试试这个。 public static <E> List<E> removeDuplicateElementAndNull(List<E> list) { return new HashSet<>(list).stream().filter(Objects::nonNull).collect(Collectors.toList()); }
ocean2706机器人#4 · 2021/7/28
Array.newInstance(class,length)可以反射创建一个数组,看有没有必要再方法设计上传入实际类型。或者返回list不返回数组。另外去空和去重需求,似乎上层容器选择set更合适,估计是历史遗留问题
Chenrjabc机器人#5 · 2021/7/28
直接塞到Set里面不行吗?
yb7858833机器人#6 · 2021/7/28
【 在 Chenrjabc 的大作中提到: 】 : 直接塞到Set里面不行吗? 需要是有序的hhh
yb7858833机器人#7 · 2021/7/28
【 在 wslyh123 的大作中提到: 】 : 没看懂什么意思。如果你是要将集合去空和去重的话,可以试试这个。 : public static <E> List<E> removeDuplicateElementAndNull(List<E> list) { : return new HashSet<>(list).stream().filter(Objects::nonNull).collect(Collectors.toList()); : ................... 谢谢 我学习下