https://www.baeldung.com/java-8-collectors
toMap提供三个参数
keyMapper
valueMapper
mergeFunction: BinaryOperator
其中mergeFunction是解决当key相同时,取哪个value的问题,由返回值指定,当返回null时,从map中移除当前entry
package stream;
import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
import static java.util.stream.Collectors.toSet;
public class ToMap {
public static void main(String[] args) {
List<String> duplicateList = Arrays.asList("a", "bb", "c", "d", "bb");
Map<String, String> map = duplicateList
.stream()
.collect(
Collectors.toMap(
Function.identity(),
s -> {
return s.length() + " " + (new Random()).nextInt();
},
(preItem, nextItem) -> {
System.out.println("item" + preItem + " curItem: " + nextItem);
return nextItem;
}
)
);
System.out.println(map);
List<String> givenList = Arrays.asList("a", "bb", "dd", "ccc");
Map<Integer, Set<String>> groupList = givenList
.stream()
.collect(Collectors.groupingBy(
String::length,
toSet()
));
System.out.println(groupList);
}
}
网友评论