在Java 8中,如何应用此过滤器?

时间:2015-12-23 00:30:30

标签: java functional-programming java-8

首先,我为问题的标题道歉,我无法想出更好的方式来表达它,请告诉我是否应该解决它。

基本上我是一名Java程序员,过于使用命令式编程,发现(并使用)Java 8中的新功能。

我写的方法非常简单,而且我的工作正常,我只是想知道是否有更多的功能"解决这个问题的方法。

我基本上会收到User的列表,并且需要返回Status = INVALID个用户的百分比。

所以我到目前为止所做的是:

public static double getFailedPercentage(List<User> users){
    Long failedCount = users.stream().filter(user -> User.Status.INVALID.equals(user.getStatus())).collect(counting());
    return (failedCount * 100) / users.size();
}

如果可能的话,我想把它作为一个一个衬里,我知道这可能是过分思考,但我想知道我使用的语言的限制和可能性。

提前感谢您的时间。

1 个答案:

答案 0 :(得分:7)

以下内容应该有效

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/