我有一個List具有泛型型別的物件,并希望將其轉換為Map使用流。但我需要應用決議器來決議引數的型別。
代碼:
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 函式中遇到錯誤,說明:
型別收集器中的 toMap() 方法不適用于引數
uj5u.com熱心網友回復:
假設您提供的代碼正確地完成了它的作業,這意味著源串列中每種型別只包含一個物件,您可以使用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()));
}
我收到一個錯誤:型別收集器中的 toMap() 方法不適用于引數
1. GenericTypeResolver.resolve...etc. .getSuperClass()作為keyMapper函式傳遞給Collectors.toMap(),但它不是函式。正確的語法應該是這樣的:x -> GenericTypeResolver.do(x). (看看這個關于 lambda 運算式的教程)
2.你定義的map是type Map<String,ABCClass<?>>,回傳getSuperClass()的type與key的型別不匹配,String需要申請getSimpleName()修復。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/445053.html
上一篇:如何在使用DartFlutter開發的應用程式中隱藏OneSignal密鑰?
下一篇:如何使用r中的回圈生成人口
