Java 将一个HashMap简化为另一个HashMap

Java 将一个HashMap简化为另一个HashMap,java,lambda,java-8,Java,Lambda,Java 8,我从如下字符串开始: "train, Train, bike, BIKE, car...etc" (train, 1), (train, 1), (car, 1), (car, 1)...etc ,并且需要返回一个HashMap(),例如: (train, 4), (car, 6), (bike, 2) 该数字表示该行程类型已出现的次数 这就是我所知道的,将字符串映射到初始hashmap,如下所示: "train, Train, bike, BIKE, car...etc" (train

我从如下字符串开始:

"train, Train, bike, BIKE, car...etc"
(train, 1), (train, 1), (car, 1), (car, 1)...etc
,并且需要返回一个
HashMap()
,例如:

(train, 4), (car, 6), (bike, 2)
该数字表示该行程类型已出现的次数

这就是我所知道的,将字符串映射到初始hashmap,如下所示:

"train, Train, bike, BIKE, car...etc"
(train, 1), (train, 1), (car, 1), (car, 1)...etc
与:

公共静态HashMap countTravelTypes(字符串travelTypes){
返回Arrays.stream(travelTypes.toLowerCase().replace(“,”)
.拆分(“,”)
.map->newhashmap(){{put(s,1);})
//下面这条线不对,但它已经尽我所能接近了
.reduce(0,map->map.key,Integer.sum(v))
}

你现在能帮我减少它吗,所以基本上把所有的列车汇总起来,显示有4辆车,你可以使用
groupingBy
收集器和
counting
下游收集器来完成这件事。这是它的样子

Map<String, Long> result = Arrays.stream(source.split(","))
    .map(String::trim)
    .map(String::toLowerCase)
    .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
Map result=Arrays.stream(source.split(“,”))
.map(字符串::trim)
.map(字符串::toLowerCase)
.collect(Collectors.groupingBy(Function.identity()、Collectors.counting());

对于类型为
Map
的输出映射,我们可以使用
收集器.summingit()

映射结果=
“火车、火车、自行车、自行车、汽车、自行车、火车”的流。拆分(“,”)
.collect(Collectors.groupby(i->i,Collectors.summingit(i->1));

您的源代码中只有2列,对吗?@Ravindranwala抱歉这可能有误导性,我添加了省略号以显示字符串不是完整长度的真正字符串!这就解决了另一个答案返回Long的问题。只是搞不清楚summingit()中的“->1”位在做什么?Stream.of(“train,train,bike,bike,car,bike,train”).split(“,”).map(i->i.toUpperCase()).collect(Collectors.groupingBy(i->i,Collectors.summingit(i->1));添加映射以转换为大写,以便将Train、Train分组到相同的元素中。@Wayneio统计每个元素的出现次数,即对于每一个类型为distinct
String
“1”(正如预期的那样,
IntFunction
)的元素被添加到下游收集器的计数中。