neo*_*811 5 java java-8 java-stream
我想检查一下,如果a LongStream包含一个特定的数字至少一次,但不完全包含这个数字:
我的方法:
public static boolean containsNum(LongStream input, int n) {
return input.anyMatch(i -> i == n);
}
Run Code Online (Sandbox Code Playgroud)
测试:
assertEquals(false, containsNum(LongStream.of(1, 2, 3), 19)); // ok
assertEquals(true, containsNum(LongStream.of(1, 2, 3, 19), 19)); //ok
assertEquals(true, containsNum(LongStream.of(1, 19, 19), 19)); //ok
assertEquals(false, containsNum(LongStream.of(1), 19)); //ok
assertEquals(false, containsNum(LongStream.of(19, 19), 19)); // FAIL
assertEquals(false, containsNum(LongStream.of(19), 19)); //FAIL
Run Code Online (Sandbox Code Playgroud)
我知道anyMatch在我的问题上无法解决问题,但我找到了最好的解决方案.我怎样才能通过所有测试?
Mal*_*wig 11
这听起来像是一个简化功能,正如安迪的回答所显示的那样,但是只要你找到了数字和不同的数字,它就会经过整个流而不是停止.
问题是...Match流的那些方法一次只查看一个元素,即你必须在一些外部状态变量中保存有关传递元素的知识.wero和Roland在他们的答案中证明了这一点.
一种可能性而不依赖于外部状态而只检查所需数量的元素将是:
boolean pass = longStream.map(l -> l == number ? 1 : 0)
.distinct()
.limit(2)
.count()
== 2;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
416 次 |
| 最近记录: |