返回信息流
这是一条镜像帖。来源:北邮人论坛 / java / #65721同步于 2021/7/28
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
关于泛型 菜鸡继续提问qwq
yb7858833
2021/7/28镜像同步7 回复
订阅后,新回复会通过你的通知中心匿名送达。
7 条回复
我想实现一个将泛型数组中的元素去重的功能 我是这样写的:
/**
* @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的干净的数组呢
没看懂什么意思。如果你是要将集合去空和去重的话,可以试试这个。
public static <E> List<E> removeDuplicateElementAndNull(List<E> list) {
return new HashSet<>(list).stream().filter(Objects::nonNull).collect(Collectors.toList());
}
Array.newInstance(class,length)可以反射创建一个数组,看有没有必要再方法设计上传入实际类型。或者返回list不返回数组。另外去空和去重需求,似乎上层容器选择set更合适,估计是历史遗留问题
【 在 wslyh123 的大作中提到: 】
: 没看懂什么意思。如果你是要将集合去空和去重的话,可以试试这个。
: public static <E> List<E> removeDuplicateElementAndNull(List<E> list) {
: return new HashSet<>(list).stream().filter(Objects::nonNull).collect(Collectors.toList());
: ...................
谢谢 我学习下