convertRawMapToStringValues(Map> cassandraRowsRawMap) { Map>-6ren">
gpt4 book ai didi

Java8 Streams - 如何将内部映射的键值从 "null"字符串修改为空对象

转载 作者:行者123 更新时间:2023-12-02 09:40:06 27 4
gpt4 key购买 nike

我定义了一个实用方法,如下所示。

public static Map<String, Map<String, String>> convertRawMapToStringValues(Map<String, Map<String, Object>> cassandraRowsRawMap) {

Map<String, Map<String, String>> cassandraStrValuesMap = cassandraRowsRawMap.entrySet()
.stream()
.collect(Collectors.toMap(s -> s.getKey(),
s -> s.getValue().entrySet().stream()
.collect(Collectors.toMap(e -> e.getKey(),
e -> String.valueOf(e.getValue())))));
return cassandraStrValuesMap;
}

String.valueOf(e.getValue()) 从调用中返回“null”值。我想获取字符串的 null 值。

当我尝试以下代码时,我在第一次 .collect 调用时收到 NPE。

Map<String, Map<String, String>> cassandraStrValuesMap = cassandraRowsRawMap.entrySet()
.stream()
.collect(Collectors.toMap(s -> s.getKey(),
s -> s.getValue().entrySet().stream()
.collect(Collectors.toMap(e -> e.getKey(),
e -> e.getValue() == null ? null : String.valueOf(e.getValue())))));
return cassandraStrValuesMap;
}

最佳答案

toMap 收集器不支持 null 值。但它并不总是必须是 Stream API:

public static <K,T,R> Map<K,R> changeValues(
Map<? extends K, T> in, Function<? super T, ? extends R> f) {

Map<K,R> result = new HashMap<>(in.size());
in.forEach((k,t) -> result.put(k, f.apply(t)));
return result;
}

public static Map<String, Map<String, String>> convertRawMapToStringValues(
Map<String, Map<String, Object>> in) {

return changeValues(in, inner -> changeValues(inner, v -> v==null? null: v.toString()));
}

实用程序方法返回具有相同键和转换值的映射,并且足够灵活,允许递归应用程序执行内部映射转换。

<小时/>

或者,我们可以采用 this answer 的解决方案至

public static Map<String, Map<String, String>> convertRawMapToStringValues(
Map<String, Map<String, Object>> in) {

return in.entrySet().stream()
.collect(Collectors.toMap(Map.Entry::getKey,
e -> e.getValue().entrySet().stream()
.collect(
HashMap::new,
(m,e2) -> m.put(e2.getKey(),
e2.getValue() == null? null: e2.getValue().toString()),
Map::putAll)));
}

与原始的 toMap 收集器不同,这不会抛出重复的键,但对于输入已经是 Map 的特定情况,不应该无论如何,重复的键。

关于Java8 Streams - 如何将内部映射的键值从 "null"字符串修改为空对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57148748/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com