Collectors.toMap方法详解
Collectors.toMap方法是Java 8中Stream API提供的一个用于将流中的元素转换为Map的方法。该方法接受三个参数:KeyMapper、ValueMapper和MergeFunction。
KeyMapper表示将流中的元素映射为Map中的键。在引用中的示例代码中,Student::getId表示以学生对象的id作为键。
ValueMapper表示将流中的元素映射为Map中的值。在引用中的示例代码中,Function.identity()表示以学生对象本身作为值。
MergeFunction表示在流中出现相同的键时如何处理冲突。在引用中的示例代码中,(oldValue,newValue) -> oldValue表示当出现冲突时保留旧的值。
引用和引用中的示例代码省略了MergeFunction参数,默认使用后一个元素替代前一个元素。
java8中 Collectors.toMap 详解
Java 8中的Collectors.toMap方法可以将Stream中的元素转换为一个Map对象。该方法有三个参数:keyMapper,valueMapper和mergeFunction。其中,keyMapper用于将Stream中的元素转换为Map的key,valueMapper用于将Stream中的元素转换为Map的value,mergeFunction用于处理当key重复时的冲突情况。
下面是一个例子,假设我们有一个List对象,其中包含多个Person对象,每个Person对象都有一个唯一的id属性和一个name属性。我们可以使用Collectors.toMap方法将List转换为一个以id为key,以Person对象为value的Map对象:
List<Person> personList = new ArrayList<>();
// 假设我们已经将多个Person对象添加到了personList中
Map<Integer, Person> personMap = personList.stream()
.collect(Collectors.toMap(Person::getId, Function.identity()));
在上面的例子中,Person::getId表示将Person对象的id属性作为Map的key,Function.identity()表示将Person对象本身作为Map的value。如果我们想要将Person对象的name属性作为Map的value,可以这样写:
Map<Integer, String> personMap = personList.stream()
.collect(Collectors.toMap(Person::getId, Person::getName));
如果我们的List中有重复的id,那么上面的代码将会抛出IllegalStateException异常。为了避免这种情况,我们可以使用mergeFunction参数来处理冲突。例如,如果我们想要将重复的id的Person对象合并为一个List,可以这样写:
Map<Integer, List<Person>> personMap = personList.stream()
.collect(Collectors.toMap(Person::getId, Collections::singletonList, (list1, list2) -> {
List<Person> resultList = new ArrayList<>(list1);
resultList.addAll(list2);
return resultList;
}));
在上面的代码中,Collections::singletonList表示将Person对象转换为只包含一个元素的List,mergeFunction参数则表示将两个List合并为一个List。
Collectors.toMap的使用
Collectors.toMap是Java 8中的一个方法,用于将集合转换为Map对象。它可以接受三个参数:keyMapper、valueMapper和mergeFunction。其中,keyMapper是一个函数,用于将集合中的元素映射为Map的键;valueMapper也是一个函数,用于将集合中的元素映射为Map的值;mergeFunction是一个函数,用于处理当存在重复的键时如何处理。在这个方法中,三个引用、、提供了不同的用法示例。
引用展示了使用PersonDto类的id作为键,将整个PersonDto对象作为值生成Map的情况。这里使用了lambda表达式,表示将id映射为自身,并在存在重复键时选择保留第一个值。
引用展示了使用Student类的id作为键,将整个Student对象作为值生成Map的情况。这里使用了静态方法Function.identity()作为值映射函数,它返回对象本身。这样可以实现将id映射为对应的Student对象,并在存在重复键时选择保留后出现的值。
引用也展示了使用Student类的id作为键,将整个Student对象作为值生成Map的情况。不同的是,这里使用了方法引用Function.identity()来表示值映射函数,它与中的lambda表达式具有相同的功能。
总结来说,Collectors.toMap方法可以根据需求选择合适的键和值的映射方式,以及处理重复键的方式,从而生成一个Map对象。123
引用[.reference_title]
- 1 Collectors.toMap()的基本使用方法[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
allinsert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - 2 3 Collectors.toMap使用详解[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
allinsert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
相关推荐
















