在解决代码战中的kata时,我遇到了将二进制数(以列表形式)转换为整数的问题的单行解决方案.我无法理解人们使用java stream api reduce函数的解决方案.请帮我理解.
例如:[0,0,0,1]被视为0001,它是1的二进制表示.
import java.util.List;
public class BinaryArrayToNumber {
public static int ConvertBinaryArrayToInt(List<Integer> binary) {
return binary.stream().reduce((x, y) -> x * 2 + y).get();
}
}
Run Code Online (Sandbox Code Playgroud)
首先,它背后的数学基于这里描述的方法
在示例的帮助下,可以最好地理解代码的工作.考虑二进制数1011(十进制11)
x
为accumulator
和y
作为ele
我们现在可以在数学上说明上述操作
accumulator = (accumulator*2)+ ele
// 在这里指出原因
让我们在1011上运行公式
您可以将其扩展为n个二进制数字.
需要注意的一件重要事情是,虽然这对于编码竞赛来说是可以的,但是这绝不应该用于现实世界的应用中,因为它reduce()
需要一个关联操作并且也不能保证顺序运行
归档时间: |
|
查看次数: |
113 次 |
最近记录: |