Collectors.toMap() 中 Map 的默认值

Exo*_*dus 0 java collections java-8 java-stream

需要转换List<Object>Map<String,Long>使用与长期价值为零Collectors.toMap()

这里的 Object 指的是我自己定义的 java 类。

List<Test> list = new ArrayList<Test>(); list.add(X); list.add(Y);
Map<String,Long> map = list.stream().collect(Collectors.toMap(Test:getName,XXXX)));
Run Code Online (Sandbox Code Playgroud)

我的预期输出:

{"x",0},{"Y",0}
Run Code Online (Sandbox Code Playgroud)

Dea*_*ool 6

您可以对值使用 lambda 表达式:

Map<String, Long> map = list.stream()
                           .collect(Collectors.toMap(Test:getName,x -> 0L,(a,b)->a));
Run Code Online (Sandbox Code Playgroud)

您也可以使用BigDecimal常量

Map<String, Long> map = list.stream()
                           .collect(Collectors.toMap(Test:getName,x -> BigDecimal.ZERO.longValue(),(a,b)->a));
Run Code Online (Sandbox Code Playgroud)