将 Java 映射代码更改为 VAVR (javaslang)
Changing Java Map code to VAVR (javaslang)
我有 2 种涉及普通地图的方法 Java,我的任务是将它们更改为完整的 VAVR。现在的问题是我得到
java.lang.ClassCastException: class java.util.HashMap cannot be cast to class io.vavr.collection.Map (java.util.HashMap is in module java.base of loader 'bootstrap'; io.vavr.collection.Map is in unnamed module of loader 'app')
我想我知道问题出在哪里,但作为初学者,我无法在完整的 VAVR 中构建该代码。我知道此类问题在 Whosebug 上不受欢迎,但网络上关于 VAVR 的材料数量有限,我根本找不到任何可以帮助我的例子。我恳请您寻求任何帮助 - 代码片段、在哪里可以找到类似示例的建议或任何可以帮助我的东西。我已经阅读了 VAVR 网页上的手册和许多教程,但仍然无法构建我的方法。希望你能理解,我不以那个话题为荣。
public io.vavr.collection.Map<Object, Object> flatten(final Map<Field, Option<Object>> data) {
final Map<Object, Object> result = new HashMap<>();
for (final Map.Entry<Field, Option<Object>> entry : data.entrySet()) {
if (entry.getValue().isDefined()) {
result.put(flattenKey(entry), flatten(entry.getValue()));
}
}
return (io.vavr.collection.Map<Object, Object>) result;
}
private Object flattenKey(final Map.Entry<?, ?> entry) {
if (entry.getKey() == null || StringUtils.isEmpty(String.valueOf(entry.getKey()))) {
return IndexerHelper.EMPTY_FIELD_NAME;
} else {
return flatten(entry.getKey());
}
}
这样的事情怎么样?仅使用 vavr 地图
public Map<Object, Object> flatten(Map<Field, Option<Object>> data) {
return data.filterValues(Option::isDefined)
.bimap(this::someFlattenOnKey, this::someFlattenOnValue)
}
如果您绝对需要获取 Java 地图作为输入:
public io.vavr.collection.Map<Object, Object> flatten(Map<Field, Option<Object>> data) {
return io.vavr.collection.HashMap.ofAll(data)
.filterValues(Option::isDefined)
.bimap(this::someFlattenOnKey, this::someFlattenOnValue)
}
我有 2 种涉及普通地图的方法 Java,我的任务是将它们更改为完整的 VAVR。现在的问题是我得到
java.lang.ClassCastException: class java.util.HashMap cannot be cast to class io.vavr.collection.Map (java.util.HashMap is in module java.base of loader 'bootstrap'; io.vavr.collection.Map is in unnamed module of loader 'app')
我想我知道问题出在哪里,但作为初学者,我无法在完整的 VAVR 中构建该代码。我知道此类问题在 Whosebug 上不受欢迎,但网络上关于 VAVR 的材料数量有限,我根本找不到任何可以帮助我的例子。我恳请您寻求任何帮助 - 代码片段、在哪里可以找到类似示例的建议或任何可以帮助我的东西。我已经阅读了 VAVR 网页上的手册和许多教程,但仍然无法构建我的方法。希望你能理解,我不以那个话题为荣。
public io.vavr.collection.Map<Object, Object> flatten(final Map<Field, Option<Object>> data) {
final Map<Object, Object> result = new HashMap<>();
for (final Map.Entry<Field, Option<Object>> entry : data.entrySet()) {
if (entry.getValue().isDefined()) {
result.put(flattenKey(entry), flatten(entry.getValue()));
}
}
return (io.vavr.collection.Map<Object, Object>) result;
}
private Object flattenKey(final Map.Entry<?, ?> entry) {
if (entry.getKey() == null || StringUtils.isEmpty(String.valueOf(entry.getKey()))) {
return IndexerHelper.EMPTY_FIELD_NAME;
} else {
return flatten(entry.getKey());
}
}
这样的事情怎么样?仅使用 vavr 地图
public Map<Object, Object> flatten(Map<Field, Option<Object>> data) {
return data.filterValues(Option::isDefined)
.bimap(this::someFlattenOnKey, this::someFlattenOnValue)
}
如果您绝对需要获取 Java 地图作为输入:
public io.vavr.collection.Map<Object, Object> flatten(Map<Field, Option<Object>> data) {
return io.vavr.collection.HashMap.ofAll(data)
.filterValues(Option::isDefined)
.bimap(this::someFlattenOnKey, this::someFlattenOnValue)
}