List<Double> vals = . . . ;
double sum = vals.stream().mapToDouble(Double::doubleValue).sum();
double[] vals = . . . ;
double sum = Arrays.stream(vals).sum();
当然,我们可以这样做:
List<Double> vals = . . . ;
double sum = vals.stream().reduce(0.0, (i,j) -> i+j);
但是reduce(...)
要比sum()
长得多。
我知道这与流需要围绕Java的非对象原语进行修改的方式有关,但是,我在这里是否遗漏了什么?有没有什么方法可以把自动装箱压缩到更短的地方?还是这只是目前的技术水平?
double sum = vals.stream().reduce(0.0, Double::sum);
对我来说,maptoDouble(Double::DoubleValue)
似乎是lambdas和streams应该省去的东西。
使用maptodouble
的需要是通过类型擦除实现泛型的决定的结果,基本上关闭了在泛型中使用基元的任何可能性。正是这个决定使得创建DoubleStream
、IntStream
和LongStream
类家族成为必要,以提供基于流的解装箱。
有没有什么方法可以把自动装箱压缩到更短的地方?还是这只是目前的技术水平?
就基于数组的解决方案而言,它是三种方案中效率最高的。但是,它不如其他两个灵活:带有maptodouble
的一个允许您对自定义类的任何属性求和,而最后一个允许您执行其他类型的聚合。
reduce(...)
比sum()
长得多
我同意,这种方法在可读性方面比maptodouble
差。
问题内容: 据我所知,使用Java 8流求和的方法是: 在我看来,这似乎有些cru琐-只是应该放弃lambda和数据流的样板“仪式”。 最佳实践告诉我们,实例比数组更可取,但是对于这种求和,数组看起来更干净: 当然,可以做到这一点: 但这比更长。 我知道这与需要围绕Java的非对象原语对流进行改造的方式有关,但是,我在这里还缺少什么吗?有什么方法可以压缩自动装箱以使其更短吗?还是这只是当前的最新状
问题内容: 我应该在样式表中使用以下哪项? W3C指定什么是 正确的方法 ? 问题答案: W3C表示引号是可选的,您使用的所有三种方式都是合法的。 开头和结尾的引号只需是相同的字符。 如果您的URL中包含特殊字符,则应使用引号或转义字符(请参见下文)。 URI值的格式为’url(’,后跟可选的空格,后跟可选的单引号(’)或双引号(“)字符,然后是URI本身,然后是可选的单引号(’)或双引号(“)字
我正在尝试对List的字段求和并返回值。我想为此使用流,但我对流不熟悉,不确定流是否可以完成此操作。这是我尝试过的,但我认为语法不正确。 上下文的相关类结构。 获取总价和单价方法
问题内容: 我有一个对象A的列表。此列表中的每个对象A都包含对象B的列表,而对象B包含对象C的列表。对象C包含一个属性名称,我想使用它使用Java 8进行过滤。 如何使用流在Java 8中编写以下代码以避免嵌套循环: 问题答案: 您可以使用两个,然后使用a,然后可以选择第一个,或者如果没有结果返回:
我有一个对象列表A。此列表中的每个对象A都包含对象B的列表,对象B包含对象C的列表。对象C包含一个属性名称,我想使用java 8进行过滤。 如何使用流在java8中编写下面的代码以避免嵌套循环:
问题内容: 假设有一个Obj类 并且您有一个实例列表,即。 现在,如何在Java8中使用过滤条件从流中找到列表中的对象的int字段值的总和(例如,对于object ,条件为)? 问题答案: 你可以做 或(使用方法参考)