I saw a 那么问题 https://stackoverflow.com/questions/36810942/linkedlist-get-method昨天关于用 Java 实现一个经典的链表。这显然是本科生数据结构课上的作业。很容易找到所有语言的列表、树等的问题和实现。
我一直在学习 Java lambda 表达式,并尝试抓住一切机会使用它们来掌握这个习惯用法。这个问题让我想知道:我如何编写自定义列表或树,以便可以在所有 Java 8 lambda 机制中使用它?
我看到的所有示例都使用内置集合。这些对我有用。我更好奇教授数据结构的教授应该如何重新思考他们的技术以反映 lambda 表达式和函数式编程。
我从一个Iterator
,但它的功能似乎并不完整。
有人有建议吗?
公开任意数据结构的流视图非常容易。您必须实现的关键接口是Spliterator
,顾名思义,它结合了两件事——顺序元素访问(迭代)和分解(分裂)。
一旦你有一个Spliterator
,您可以轻松地将其转换为流StreamSupport.stream()
。事实上,这里是stream()
方法来自AbstractCollection
(大多数集合只是继承):
default Stream<E> stream() {
return StreamSupport.stream(spliterator(), false);
}
所有真正的工作都在spliterator()
方法——并且分裂器质量范围很广(您需要实现的绝对最低限度是tryAdvance
,但如果这就是您实现的全部内容,它将按顺序工作,但会失去大部分流优化。)查看 JDK 源代码Arrays.stream()
, IntStream.range()
)了解如何做得更好的示例。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)