浏览Brian Goetz的这篇非常有趣但只有一年历史的演示文稿-在链接的幻灯片中,他介绍了一个流API中的aggregateBy()
方法,该方法应该聚合列表的元素(?)到贴图(给定默认初始值和操作该值的方法(也适用于重复的关键点)-请参见演示文稿中的下一张幻灯片)。
显然,流API中没有这样的方法。在Java 8中是否还有其他类似的方法?
这个特定的Javadoc条目是我在Java8中的这个聚合中能找到的最接近的东西。尽管它是第三方API,但签名似乎排列得很好——您提供了一些从中获取值的函数,一些用于值的终端函数(在本例中为零),以及一些将函数和值组合在一起的函数。
这感觉很像一个收藏家,这将使我们能够做到这一点。
Map<String, Integer> strIntMap =
intList.stream()
.collect(Collectors
.groupingBy(Document::getAuthor,
Collectors.summingInt(Document::getPageCount)));
这样一来,我们就可以根据作者的名字对列表中的每个条目进行分组,并将作者拥有的总页码相加到一张地图中
假设我们有一个员工名单,上面有他们的部门和工资,我们想要每个部门支付的总工资。
有几种方法可以做到这一点,例如,您可以使用toMap收集器来聚合每个部门的数据:
例子:
import static java.util.stream.Collectors.*;
public static void main(String[] args) {
List<Person> persons = Arrays.asList(new Person("John", "Sales", 10000),
new Person("Helena", "Sales", 10000),
new Person("Somebody", "Marketing", 15000));
Map<String, Double> salaryByDepartment = persons.stream()
.collect(toMap(Person::department, Person::salary, (s1, s2) -> s1 + s2));
System.out.println("salary by department = " + salaryByDepartment);
}
对于流,通常有几种方法可以获得所需的结果,例如:
import static java.util.stream.Collectors.*;
Map<String, Double> salaryByDepartment = persons.stream()
.collect(groupingBy(Person::department, summingDouble(Person::salary)));
作为参考,人员类别:
static class Person {
private final String name, department;
private final double salary;
public Person(String name, String department, double salary) {
this.name = name;
this.department = department;
this.salary = salary;
}
public String name() { return name; }
public String department() { return department; }
public double salary() { return salary; }
}
聚合操作可以使用Collection
类来完成。因此,在视频中,该示例相当于:
Map<String, Integer> map =
documents.stream().collect(Collectors.groupingBy(Document::getAuthor, Collectors.summingInt(Document::getPageCount)));
groupingBy方法将为您提供一个映射
这是通过向groupingBy
提供下游收集器来完成的,它是sum ming Int
,从而生成Map
我认为他们删除了这个操作,并创建了收集器类,以获得一个有用的类,该类包含许多您通常使用的缩减。
ChromeAPI提供了一个获取当前窗口(返回包含当前正在执行的代码的窗口)的方法。Safari有等效的方法吗?
问题内容: 在布莱恩·格茨(Brian Goetz)的这个非常有趣但只有一年历史的演示中,他在幻灯片链接中介绍了应该在Stream API中提供的一种方法,该方法应该将列表(?)的元素聚合到地图(给定默认初始值)以及操作该值的方法(也适用于重复键)-请参见演示文稿中的下一张幻灯片。 显然,Stream API中没有这种方法。还有另一种方法可以在Java 8中执行类似操作吗? 问题答案: 聚合操作可
我知道Java中有无限的流。 有没有办法检查流是否有限? 类似这样的方法
问题内容: Java中是否有内置方法来查找任何数据类型的大小?有什么方法可以找到尺寸? 问题答案: 否。标准Java SE类库中没有这种方法。 设计者的观点是Java不需要它,因为该语言使应用程序1无需知道需要为原始值,对象或具有给定数量的元素的数组保留多少空间。 您可能会认为sizeof运算符对需要了解其数据结构占用多少空间的人很有用。但是,您还可以使用Java内存分析器简单,可靠地获得此信息以
问题内容: 我在chrome和firefox中测试过,这就是问题所在。Date对象的方法有错误?当我在某天设置位置日期时,例如 然后,js代码为: 结果为“ 9”,为什么? 我发现当月有31天时,请运行该方法,该方法将返回错误的值 为什么? 问题答案: 让我们分解一下: 只有当天的值大于传递给的当月的最大天数时,这才是问题。否则,它会按您期望的那样工作。