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<>();
}