Java Stream.forEach期间出现空指针异常
我试图模拟一个无限个数的中间值。这是我的代码Java Stream.forEach期间出现空指针异常,java,java-8,java-stream,Java,Java 8,Java Stream,我试图模拟一个无限个数的中间值。这是我的代码 package hard; import java.util.PriorityQueue; import java.util.Queue; import java.util.Random; import java.util.stream.Stream; public class Median { static Queue<Integer> minHeap; static Queue<Integer> maxHeap; {
package hard;
import java.util.PriorityQueue;
import java.util.Queue;
import java.util.Random;
import java.util.stream.Stream;
public class Median
{
static Queue<Integer> minHeap;
static Queue<Integer> maxHeap;
{
minHeap = new PriorityQueue<>();
maxHeap = new PriorityQueue<>();
}
private static void add(Stream<Integer> randomNos)
{
randomNos.forEach(no ->
{
if (minHeap.size() == 0 || no < minHeap.peek())
{
minHeap.add(no);
}
else
{
maxHeap.add(no);
}
int diff = minHeap.size() - maxHeap.size();
if (Math.abs(diff) > 1)
{
if (diff < 0)
{
minHeap.add(maxHeap.peek());
}
else
{
maxHeap.add(minHeap.peek());
}
}
});
}
private static int median()
{
int median = 0;
if ((minHeap.size() + maxHeap.size()) % 2 == 0)
{
median = (minHeap.peek() + maxHeap.peek()) / 2;
}
else
{
if (minHeap.size() < maxHeap.size())
{
median = maxHeap.peek();
}
else
{
median = minHeap.peek();
}
}
return median;
}
public static void main(String[] args)
{
add(new Random().ints(1, 100000).boxed());
System.out.println(median());
}
}
我运行了调试器,发现有两个相同整数的值被重复,之后该异常被清除
{
minHeap = new PriorityQueue<>();
maxHeap = new PriorityQueue<>();
}
{
minHeap=new PriorityQueue();
maxHeap=new PriorityQueue();
}
是一个实例初始值设定项。你可能想要
static {
minHeap = new PriorityQueue<>();
maxHeap = new PriorityQueue<>();
}
静态{
minHeap=new PriorityQueue();
maxHeap=new PriorityQueue();
}
以便在初始化类时执行它
但是请注意,
PriorityQueue
对象将为空peek
无论如何都会返回null
,而可能需要指出第25行是什么。(顺便说一句:.peek()可能返回null)。此外:我认为这不是一个正确的实现。你需要对这些值进行排序。哎呀!一个简单的错误。谢谢你捕捉到它。我被堆栈跟踪愚弄了
static {
minHeap = new PriorityQueue<>();
maxHeap = new PriorityQueue<>();
}