我有以下课程。
class Person {
String name;
LocalDate birthday;
Sex gender;
String emailAddress;
public int getAge() {
return birthday.until(IsoChronology.INSTANCE.dateNow()).getYears();
}
public String getName() {
return name;
}
}
我希望能够按年龄分组,然后收集人员名称列表,而不是人员对象本身。全部以一个漂亮的lamba表达式表示。
为了简化所有步骤,我链接了当前的解决方案,该解决方案按年龄存储分组的结果,然后对其进行迭代以收集名称。
ArrayList<OtherPerson> members = new ArrayList<>();
members.add(new OtherPerson("Fred", IsoChronology.INSTANCE.date(1980, 6, 20), OtherPerson.Sex.MALE, "fred@example.com"));
members.add(new OtherPerson("Jane", IsoChronology.INSTANCE.date(1990, 7, 15), OtherPerson.Sex.FEMALE, "jane@example.com"));
members.add(new OtherPerson("Mark", IsoChronology.INSTANCE.date(1990, 7, 15), OtherPerson.Sex.MALE, "mark@example.com"));
members.add(new OtherPerson("George", IsoChronology.INSTANCE.date(1991, 8, 13), OtherPerson.Sex.MALE, "george@example.com"));
members.add(new OtherPerson("Bob", IsoChronology.INSTANCE.date(2000, 9, 12), OtherPerson.Sex.MALE, "bob@example.com"));
Map<Integer, List<Person>> collect = members.stream().collect(groupingBy(Person::getAge));
Map<Integer, List<String>> result = new HashMap<>();
collect.keySet().forEach(key -> {
result.put(key, collect.get(key).stream().map(Person::getName).collect(toList()));
});
当前解决方案
不理想,为了学习,我想有一个更优雅,更有效的解决方案。
将Stream与分组时Collectors.groupingBy
,可以使用自定义对值指定归约运算Collector
。在这里,我们需要使用Collectors.mapping
,它需要一个函数(映射是什么)和一个收集器(如何收集映射的值)。在这种情况下,映射为Person::getName
,即返回Person的名称的方法引用,我们将其收集到中List
。
Map<Integer, List<String>> collect =
members.stream()
.collect(Collectors.groupingBy(
Person::getAge,
Collectors.mapping(Person::getName, Collectors.toList()))
);
我有以下课程。 我希望能够按年龄分组,然后收集人名列表,而不是人名对象本身;所有这些都在一个漂亮的lamba表达式中。 为了简化所有这些,我链接了当前的解决方案,该解决方案存储按年龄分组的结果,然后迭代它以收集名称。 当前解决方案 不理想,为了学习,我想有一个更优雅、更高效的解决方案。
Java流新手在这里。目前我正在完成本书中关于收集者的第6章(用流收集数据)。 我的对象是这样的。 这样做的目的是得到某种总体总结报告。基本上是一个HashMap 关键1: 投影-表示每个报告中所有投影的总和。 关键2: <代码>票据-表示每个报表中所有票据的总和。 关键3: 收入-表示每个报表的所有收入之和。 现在,我实际上通过创建自定义收集器来进行赋值,称为。 所以我得到的结果是这样的: 所以
问题内容: 我一直在寻找一个好的教程来教我如何使用简单的DataBound控件(如Repeater)来制作自定义的Paging控件,以实现高性能的分页功能。 我找到了很多有关该问题的文章,但没有一个是完整的答案。 ASP.NET中大型结果集的分页 这是一个了不起的工具,它具有统计信息,并且在不同方法之间进行了很好的比较,但是问题在于,在SQL Server使用新功能ROW_NUMBER()之前,它
我正在使用我有一个类,如下所示: 现在我想做的是: 筛选出senderId无效的记录(使用映射) 下面是我的代码: 这给我带来了一个错误: 错误:(105,90)java:找不到适用于groupingBy(共享[…]的方法gMode,java。util。作用函数)方法java。util。流动收藏家。groupingBy(java.util.function.function)不适用(无法推断类型变
我已经通过实现收集器接口并重写其方法实现了一个自定义收集器。收集器实现如下: 以下是我的Person类:
我是使用Java8流API的新手,但我希望使用它来解决以下问题。假设我有一个名为的POJO,它包含、和属性,这些属性可以表示以下内容的每一行记录: 看起来如下: 上述四条记录需要合并为两条按名称分组的记录,其中: 属性求和 属性求和 组合记录包括属性,该属性是和的累加和相乘的结果。 因此,上述结果将是: 一个名为的不同POJO将表示组合记录的每一行记录: 有哪些好的方法/解决方案可以将输入的列表转