Ern*_*nio 4 java java-8 java-stream
我需要在我的文件系统中找到第一个免费索引,其中包含名称流作为源.
考虑列表:["New2","New4","New0","New1",......]第一个未使用的索引将是3.
int index = 0;
try (IntStream indexes = names.stream()
.filter(name -> name.startsWith("New"))
.mapToInt(Integer::parseInt)
.distinct()
.sorted())
{
// I was thinking about making possible indexes stream, removing existig ones from try-with-resource block, and getting .min().
IntStream.rangeClosed(0, 10)... // Idk what to do.
}
Run Code Online (Sandbox Code Playgroud)
我要求别人帮我找到正确的语法,或提出更好的解决方案.
最有效的方法是收集到BitSet:
int first = names.stream()
.filter(name -> name.startsWith("New"))
.mapToInt(s -> Integer.parseInt(s.substring(3)))
.collect(BitSet::new, BitSet::set, BitSet::or).nextClearBit(0);
Run Code Online (Sandbox Code Playgroud)
请注意,这些位本质上是排序的和不同的.此外,总会有一个"免费"索引.如果0在最大数量和最大数量之间没有间隙,则下一个空闲将是最大值+ 1,如果根本没有匹配元素,则下一个空闲将为零.
| 归档时间: |
|
| 查看次数: |
231 次 |
| 最近记录: |