list.stream().map(ContractRegistrationVO::getFirstName)判断getFirstName出现的次数
时间: 2023-07-22 09:16:33 浏览: 68
在Java中,统计一个List中某个属性出现的次数可以使用Stream API的collect方法结合Collectors的groupingBy和counting方法来实现。具体来说,你可以使用下面的代码来统计List中ContractRegistrationVO对象的firstName属性出现的次数:
```
Map<String, Long> countMap = list.stream()
.map(ContractRegistrationVO::getFirstName)
.collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
```
这段代码中,map方法用于将List中的每个ContractRegistrationVO对象的firstName属性提取出来,形成一个新的Stream对象。然后,collect方法将该Stream对象中的元素收集到一个Map对象中,其中Map的key是firstName属性的值,value是该属性值出现的次数。具体的实现是通过groupingBy和counting方法来完成的。
最后,你可以通过访问countMap对象来获取firstName属性值出现的次数,例如,countMap.get("张三")将返回该List中firstName为"张三"的元素出现的次数。
相关问题
java liststream根据对象中的某个属性分组
可以使用Java 8中的Stream的groupingBy()方法来根据对象中的某个属性分组。例如,假设我们有一个包含Person对象的List:
```
List<Person> people = new ArrayList<>();
people.add(new Person("Alice", "Smith", 25));
people.add(new Person("Bob", "Johnson", 30));
people.add(new Person("Charlie", "Brown", 35));
people.add(new Person("David", "Davis", 40));
```
我们可以使用Stream的groupingBy()方法来根据这些人的年龄分组:
```
Map<Integer, List<Person>> peopleByAge = people.stream()
.collect(Collectors.groupingBy(Person::getAge));
```
这将返回一个Map,其中键是人的年龄,值是与该年龄相对应的人的列表。我们可以使用它来打印每个年龄组中的人:
```
for (Map.Entry<Integer, List<Person>> entry : peopleByAge.entrySet()) {
int age = entry.getKey();
List<Person> peopleInAgeGroup = entry.getValue();
System.out.println("Age group " + age + ":");
for (Person person : peopleInAgeGroup) {
System.out.println(" " + person.getFirstName() + " " + person.getLastName());
}
}
```
这将输出:
```
Age group 25:
Alice Smith
Age group 30:
Bob Johnson
Age group 35:
Charlie Brown
Age group 40:
David Davis
```
注意,groupingBy()方法返回一个Collector,它将流元素分组到一个Map中。Map的键是分组函数的结果,而值是一个List,其中包含所有具有相同分组函数结果的元素。在上面的示例中,分组函数是Person::getAge,它返回每个人的年龄。
Collectors.toMap 多个字段为key
要使用Collectors.toMap函数将多个字段作为key,你可以通过创建一个自定义的key提取器(KeyExtractor)来实现。在提取器中,你可以将多个字段组合成一个唯一的key,以确保不会出现重复的key值。以下是一个示例代码:
```
Map<String, Person> personMap = personList.stream()
.collect(Collectors.toMap(p -> p.getFirstName() + "_" + p.getLastName(), Function.identity()));
```
在这个示例中,我们将一个Person对象的firstName和lastName字段组合成一个唯一的key。如果存在两个Person对象具有相同的firstName和lastName,那么它们将被视为重复的key,并且会引发IllegalStateException异常。为了解决重复key的问题,你可以使用第三个参数来定义解决冲突的策略,例如选择保留旧值或者选择保留新值。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* [ListToMapDuplicateKey.java](https://download.csdn.net/download/snxkxk/12321923)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"]
- *2* [Stream流Collectors.toMap用法](https://blog.csdn.net/m0_55070913/article/details/126516665)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"]
- *3* [Java 8 lamda Stream的Collectors.toMap 参数](https://blog.csdn.net/qq_43842093/article/details/125031924)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"]
[ .reference_list ]
阅读全文