gpt4 book ai didi

java - 两个对象之间的元素流?

转载 作者:行者123 更新时间:2023-12-02 04:34:34 26 4
gpt4 key购买 nike

我有一个自己实现的队列。队列有两个节点,前端和尾部。现在我想用 Stream 实现一个 size 方法。我想在两个节点之间创建一个 Stream 并返回 Stream 的大小。

但此时,我不知道如何在两个节点之间创建所有节点的 Stream。

节点有一个 Node 类型的变量,指向队列中的下一个节点,对于最后一个节点,该变量为 null。

我已经尝试制作一个 Node.getNext 的 Stream 并过滤掉 Stream 中为 null 的元素。

public class Node<T> {

private Node<T> next;
private T element;

public Node(T element) {
this.element = element;
}

public Node<T> getNext() {
return next;
}

public void setNext(Node<T> next) {
this.next = next;
}

public T getElement() {
return element;
}

}

public class Queue<T> {

private Node<T> front;
private Node<T> back;

public int size() {
// This works but I want to use Stream
/*
int i = 0;
Node<T> n = front;
while (n.getNext() != null) {
i++;
n = n.getNext();
}
i++;
return i;
*/
return (int) Stream.iterate(
front, Node::getNext)
.filter(Objects::nonNull)
.count();
}

}

我期望数字为3,但实际结果是

Exception in thread "main" java.lang.NullPointerException
at java.base/java.util.stream.Stream$1.tryAdvance(Stream.java:1226)
at java.base/java.util.Spliterator.forEachRemaining(Spliterator.java:326)
at java.base/java.util.stream.AbstractPipeline.copyInto(AbstractPipeline.java:484)
at java.base/java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)
at java.base/java.util.stream.ReduceOps$ReduceOp.evaluateSequential(ReduceOps.java:913)
at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:257)
at java.base/java.util.stream.ReduceOps$5.evaluateSequential(ReduceOps.java:248)
at java.base/java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)
at java.base/java.util.stream.ReferencePipeline.count(ReferencePipeline.java:605)
at Queue.size(Queue.java:46)
at Main.main(Main.java:19)

最佳答案

你很接近。

但是你需要使用其他版本的iterate

Stream.iterate(front, x -> x != null, Node::getNext)
.count()

关于java - 两个对象之间的元素流?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56557871/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com