我有这个代码。这是地图Map<Data, Boolean>
int mask = 0;
for (Map.Entry<Data, Boolean> entry : map.entrySet()) {
if (entry.getKey().getValue() > 0 && entry.getValue()) {
mask = mask | (1 << (entry.getKey().getValue() - 1));
}
}
Run Code Online (Sandbox Code Playgroud)
我想使用 Java 流计算掩码。在这里,我试图但只得到然后过滤列表。不知道这里如何计算掩码。
Integer mask = map.entrySet().filter( entry -> entry.getKey().getValue() > 0 && entry.getValue()).?
Run Code Online (Sandbox Code Playgroud)
Jak*_* Em 12
您可以将您的条目映射到计算出的值,然后or
在 reduce 运算符中应用:
map.entrySet().stream()
.filter(entry -> entry.getValue() && entry.getKey().getValue() > 0)
.mapToInt(entry -> (1 << (entry.getKey().getValue() - 1)))
.reduce(0, (r, i) -> r | i)
Run Code Online (Sandbox Code Playgroud)
编辑:如果映射为空,则将 0 作为标识元素添加到缩减操作以具有默认值 0。
Edit2:正如评论中所建议的,我颠倒了过滤顺序以避免不必要的方法调用
Edit3:正如评论中所建议的,mapToInt
现在使用
你可以试试这个,但正如 Aniket 上面所说的,mask
改变使用 Strem 并不是一个好主意。
map.entrySet().filter( entry -> entry.getKey().getValue() > 0 && entry.getValue()).forEach(k->{mask=mask | (1 << (k.getKey().getValue() - 1))});
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
250 次 |
最近记录: |