我有一个这样的清单:
int[] counting = new int[]{1,0,-1,-2,-1,-2,-1,0,1,2,1,0,-1,0,1,2};
我要过滤0和0之间的负值。
对于上面的列表,结果应返回2,因为0到0之间存在一个负数,并且对于第三个范围也有效。
List<Integer> result = Arrays.stream(counting).filter(x -> ).collect(Collectors.toList());
如何收集范围值?之后,如何检查是否为负数?
换句话说,我想计算之间有一个负值的(0,0)对。因此,由于-1,-2,-1,-2,-1的值为负,而-1的值为1,因此此类对的数量为2。
最佳答案
请勿为此使用流管道。流非常适合元素的独立处理和过滤。它们不适合依赖于流中其他元素是否存在的处理(此处早晚为0)。
使用循环。在进入循环之前,请检查列表中的第一个元素是否为0(如果需要),如果没有则抛出异常(因此问题中的示例列表将无法通过此测试)。声明我们在循环期间需要的一些变量:
int negativeCount = 0;
boolean hasSeenNegativeSinceLastZero = false;
在循环中,每次看到负数时,请将
hasSeenNegativeSinceLastZero
设置为true。每次看到0时,如果hasSeenNegativeSinceLastZero
为true,则将1加到计数并将hasSeenNegativeSinceLastZero
设置为false。快乐的编码。