gpt4 book ai didi

java - 如何根据日期进行分组并添加其他属性

转载 作者:行者123 更新时间:2023-11-30 05:32:41 26 4
gpt4 key购买 nike

我的 Person DTO 有 4 个属性

class Person {
private String name;
private String city;
private int age;
private String dateOfBirth;
// Setters and getters
}



// sample data
personList.add(new Person("Mike", "London", 38, "01/01/1981"));
personList.add(new Person("John", "London", 38, "01/02/1981"));
personList.add(new Person("John", "Bristol",38, "01/06/1981"));
personList.add(new Person("Steve", "Paris",06, "03/07/2013"));

我正在尝试根据 dateOfBirth 属性对上述列表中的数据进行分组。(仅考虑月份和年份,忽略日期)如果用户属于相同的月份和年份,则添加年龄,示例输出如下

最佳答案

为了让这个简单,首先我会流式传输 List<Person然后将它们收集到 Map<String, List<Person>>使用基于 Date 的 groupingBy输出模式outputPattern ,自 SimpleDateFormat是我想使用的遗产 LocalDate

 String outDate = LocalDate.parse(p1.getDateOfBirth(),
DateTimeFormatter.ofPattern(patternInput))
.format(DateTimeFormatter.ofPattern(outputPattern));

现在将其与 groupingBy 结合起来

 Map<String, List<Person>> groupResult = personList.stream()
.collect(Collectors.groupingBy(p->LocalDate.parse(p.getDateOfBirth(),
DateTimeFormatter.ofPattern(patternInput))
.format(DateTimeFormatter.ofPattern(outputPattern))));

现在使用forEach并以所需格式打印输出

  groupResult.forEach((k,v)->System.out.println("Date : "+ k+
", Age : " + v.stream().mapToInt(Person::getAge).sum()+
", UniqueCityCount : "+v.stream().map(Person::getCity).distinct().count()));

最终输出

Date : Mar-19, Age : 34, UniqueCityCount : 1
Date : Jan-81, Age : 97, UniqueCityCount : 2

您还可以使用YearMonth ,但如果您需要自己的格式,这仍然是同样的事情

  String ym = YearMonth.parse(p1.getDateOfBirth(), 
DateTimeFormatter.ofPattern(patternInput))
.format(DateTimeFormatter.ofPattern(outputPattern));

输出

Mar-19

默认year-month返回此格式ISO-8601 日历系统中的年月,例如 2007-12。

关于java - 如何根据日期进行分组并添加其他属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57229272/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com