如何使用流和收集器将通用对象列表转换为地图
How can I convert a list of Genric Objects into a Map using streams and collectors
我有 List
个具有通用类型的对象,我想使用流将其转换为 Map
。但是我需要应用 resolver 来解析参数的类型。
代码:
private Map<String,ABCClass<?>> mapToCreate=new HashMap<>();
List<ABCClass<?>> listOfABC;
for(ABCClass<?> vals: listOfABC){
Class<?> typeArgument=((Class<?>) GenericTypeResolver.resolveTypeArgument(vals.getClass().getSuperClass(),ABCClass.class));
mapToCreate.put(typeArgument.getSimpleName(),vals);
}
我想通过使用收集器和流将上述代码转换为增强格式。可能吗?
我试过这个:
mapToCreate = listOfABC.stream()
.collect(Collectors.toMap(((Class<?>) GenericTypeResolver.resolveTypeArgument(listOfABC.getClass().getSuperClass(), ABCClass.class), listOfABC)));
我在以下行的 toMap 函数中遇到错误:
The method toMap() in the type collectors is not applicable for the
arguments
假设您提供的代码正确地完成了它的工作,这意味着源列表只包含每种类型的一个对象,您可以使用 Collectors.toMap()
,如下面的代码所示。否则,您的 map.put()
将覆盖值,要解决冲突,您必须将第三个参数传递给 Collectors.toMap()
.
public Map<String, ABCClass<?>> getObjectBySimpleName(List<ABCClass<?>> listOfABC) {
return listOfABC.stream()
.collect(Collectors.toMap(val -> ((Class<?>) GenericTypeResolver.resolveTypeArgument(/*...*/))
.getSimpleName(),
Function.identity()));
}
I am getting an error: The method toMap() in the type collectors is not applicable for the arguments
1. GenericTypeResolver.resolve...etc. .getSuperClass()
作为 keyMapper
函数传递给 Collectors.toMap()
, but it's not a function. The correct syntax should be like this: x -> GenericTypeResolver.do(x)
. (take a look at this tutorial on lambda expressions)
2. 您定义的映射类型为 Map<String,ABCClass<?>>
,而 getSuperClass()
返回的类型与键 [=] 的类型不匹配20=] 并且您需要应用 getSimpleName()
来修复它。
我有 List
个具有通用类型的对象,我想使用流将其转换为 Map
。但是我需要应用 resolver 来解析参数的类型。
代码:
private Map<String,ABCClass<?>> mapToCreate=new HashMap<>();
List<ABCClass<?>> listOfABC;
for(ABCClass<?> vals: listOfABC){
Class<?> typeArgument=((Class<?>) GenericTypeResolver.resolveTypeArgument(vals.getClass().getSuperClass(),ABCClass.class));
mapToCreate.put(typeArgument.getSimpleName(),vals);
}
我想通过使用收集器和流将上述代码转换为增强格式。可能吗?
我试过这个:
mapToCreate = listOfABC.stream()
.collect(Collectors.toMap(((Class<?>) GenericTypeResolver.resolveTypeArgument(listOfABC.getClass().getSuperClass(), ABCClass.class), listOfABC)));
我在以下行的 toMap 函数中遇到错误:
The method toMap() in the type collectors is not applicable for the arguments
假设您提供的代码正确地完成了它的工作,这意味着源列表只包含每种类型的一个对象,您可以使用 Collectors.toMap()
,如下面的代码所示。否则,您的 map.put()
将覆盖值,要解决冲突,您必须将第三个参数传递给 Collectors.toMap()
.
public Map<String, ABCClass<?>> getObjectBySimpleName(List<ABCClass<?>> listOfABC) {
return listOfABC.stream()
.collect(Collectors.toMap(val -> ((Class<?>) GenericTypeResolver.resolveTypeArgument(/*...*/))
.getSimpleName(),
Function.identity()));
}
I am getting an error: The method toMap() in the type collectors is not applicable for the arguments
1. GenericTypeResolver.resolve...etc. .getSuperClass()
作为 keyMapper
函数传递给 Collectors.toMap()
, but it's not a function. The correct syntax should be like this: x -> GenericTypeResolver.do(x)
. (take a look at this tutorial on lambda expressions)
2. 您定义的映射类型为 Map<String,ABCClass<?>>
,而 getSuperClass()
返回的类型与键 [=] 的类型不匹配20=] 并且您需要应用 getSimpleName()
来修复它。