【发布时间】:2020-09-23 21:23:24
【问题描述】:
如何将返回集合修改为自定义类型?
我有一个自定义的链表对象,我想在对其进行某种类型的操作后替换它。
这是我想要实现的一个简单示例:
myCustomList = myCustomList.stream()
.sorted(Comparator.comparing(user::getId))
.collect(Collectors.toCollection(CustomLinkedList::new))
我从这段 CustomlinkedList::new 代码中得到以下错误。
方法引用中的错误返回类型:无法将 CustomLinkedList 转换为 java.util.Collection
我想我可以将它转换为默认的 LinkedList 对象,对其进行迭代并将节点一一添加到我的 customLinkedList 实现中,但这对我来说并不是一个干净的解决方案。
这是我正在使用的 customList 的链接:customLinkedList
有没有办法解决这个问题?
更新:
根据 Ismail 的提议,我设法实现了 Collector.of,如下所示:
.collect(Collector.<T, CustomLinkedList<T>>of(
CustomLinkedList::new,
CustomLinkedList::add,
CustomLinkedList::cloneInto));
但现在我收到以下错误:
java.lang.ArrayIndexOutOfBoundsException:索引 0 超出长度 0 的范围
解决方案:
我完全忘记了我使用的是设置大小为 0 的 Spliterators.spliterator。将其修复为列表的当前大小可以解决问题。谢谢大家!
【问题讨论】:
-
你能告诉我们你的 CustomLinkedList 类吗?
-
@Ismail 用列表实现的链接更新了问题
-
出现新问题后,您应该将所有信息都放在帖子中,而不是滴灌信息。
CustomLinkedList的实现在哪里? -
@George 问题中有一个指向我正在使用的自定义链表的链接,也许你错过了?
-
@George 支持你提醒我下次看起来更好。用解决方案更新了问题
标签: java java-stream doubly-linked-list