当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《在Java8中,如何应用此过滤器?》经验,为你挑选了1个好方法。

首先,我为问题的标题道歉,我想不出更好的方式来表达它,如果我应该解决它,请告诉我.

基本上我是一个Java程序员,过于使用命令式编程,发现(和玩)Java 8的新功能.

我写的方法非常简单,而且我的工作正常,我只是想知道是否有一种更"功能"的解决方法.

基本上我收到一个列表User,并需要返回那些用户的百分比Status = INVALID.

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

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

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

在此先感谢您的时间.



1> luk2302..:

以下应该有效

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/


@RodrigoSasaki特别是如果你想聚合我会说是的.因为聚合函数通常对数字起作用,因此您只需要为您的用例找到合适的映射.
推荐阅读
喜生-Da
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有