首先,我为问题的标题道歉,我想不出更好的方式来表达它,如果我应该解决它,请告诉我.
基本上我是一个Java程序员,过于使用命令式编程,发现(和玩)Java 8的新功能.
我写的方法非常简单,而且我的工作正常,我只是想知道是否有一种更"功能"的解决方法.
基本上我收到一个列表User
,并需要返回那些用户的百分比Status = INVALID
.
所以这就是我到目前为止所做的:
public static double getFailedPercentage(Listusers){ Long failedCount = users.stream().filter(user -> User.Status.INVALID.equals(user.getStatus())).collect(counting()); return (failedCount * 100) / users.size(); }
如果可能的话,我想把它作为一个班轮,我知道这可能是过分思考,但我想知道我使用的语言的限制和可能性.
在此先感谢您的时间.
以下应该有效
return users.stream() .mapToInt(user -> User.Status.INVALID.equals(user.getStatus()) ? 100 : 0) .average() .getAsDouble();
它将其映射Status
到0或100,然后取平均值.对于每个INVALID
拥有100的用户而言,这意味着每个用户都有0,其平均值就是您所要求的确切结果.
100
你乘以的是相同的百.如果要使用百分比表示百分比,请将其替换为1
.
https://docs.oracle.com/javase/tutorial/collections/streams/