将 Set 转换为 Map 时出现问题
Issue while converting Set to Map
我正在尝试使用收集器使用 java 8 将 Set 转换为 Map。
Set<B2BUnitModel> payersList = .....
final Map<B2BUnitModel, List<B2BUnitPartnershipModel>> b2bUnitPartnershipMap = new HashMap<>();
final Map<B2BUnitModel, Object> map = payersList.stream().collect(Collectors.toMap(Function.identity(), Arrays::asList));
b2bUnitPartnershipMap.putAll(map); // Will throw Type Cast Error
我无法理解如何将 Map 值转换为 B2BUnitPartnershipModel 类型,因为 Arrays::asList
只会 return Object
类型。
有什么方法可以让我在 Collectors.toMap(Function.identity(), Arrays::asList)
中写一些东西,这样 api 就会 return 想要的地图(Map<B2BUnitModel, List<B2BUnitPartnershipModel>>
而不是 Map<B2BUnitModel, Object>
).
我想创建一个以 Set value 作为键和空 B2BUnitPartnershipModel
列表的 Map。
假设 B2BUnitModel
是 Key
并且 B2BUnitPartnershipModel
是 Value
下面的代码使用 lambda expressions instead of method references.
代码
@Test
public void testMapCollector() {
Set<Key> keySet = new HashSet<>();
keySet.add(new Key("key1"));
keySet.add(new Key("key2"));
keySet.add(new Key("key3"));
Map<Key, List<Value>> map = keySet.stream().collect(
Collectors.toMap(k -> k, key -> new ArrayList<>()));
System.out.println(map);
}
class Key {
String key;
public Key(String value) {
this.key = value;
}
@Override
public String toString() {
return "Key [key=" + key + "]";
}
}
class Value {
}
输出
{Key [key=key1]=[], Key [key=key3]=[], Key [key=key2]=[]}
您的 Arrays::asList
导致问题。试试这个:
Map<B2BUnitModel, List<B2BUnitPartnershipModel>> map = set.stream().collect(Collectors.toMap(Function.identity(), unit -> new ArrayList<>()));
我正在尝试使用收集器使用 java 8 将 Set 转换为 Map。
Set<B2BUnitModel> payersList = .....
final Map<B2BUnitModel, List<B2BUnitPartnershipModel>> b2bUnitPartnershipMap = new HashMap<>();
final Map<B2BUnitModel, Object> map = payersList.stream().collect(Collectors.toMap(Function.identity(), Arrays::asList));
b2bUnitPartnershipMap.putAll(map); // Will throw Type Cast Error
我无法理解如何将 Map 值转换为 B2BUnitPartnershipModel 类型,因为 Arrays::asList
只会 return Object
类型。
有什么方法可以让我在 Collectors.toMap(Function.identity(), Arrays::asList)
中写一些东西,这样 api 就会 return 想要的地图(Map<B2BUnitModel, List<B2BUnitPartnershipModel>>
而不是 Map<B2BUnitModel, Object>
).
我想创建一个以 Set value 作为键和空 B2BUnitPartnershipModel
列表的 Map。
假设 B2BUnitModel
是 Key
并且 B2BUnitPartnershipModel
是 Value
下面的代码使用 lambda expressions instead of method references.
代码
@Test
public void testMapCollector() {
Set<Key> keySet = new HashSet<>();
keySet.add(new Key("key1"));
keySet.add(new Key("key2"));
keySet.add(new Key("key3"));
Map<Key, List<Value>> map = keySet.stream().collect(
Collectors.toMap(k -> k, key -> new ArrayList<>()));
System.out.println(map);
}
class Key {
String key;
public Key(String value) {
this.key = value;
}
@Override
public String toString() {
return "Key [key=" + key + "]";
}
}
class Value {
}
输出
{Key [key=key1]=[], Key [key=key3]=[], Key [key=key2]=[]}
您的 Arrays::asList
导致问题。试试这个:
Map<B2BUnitModel, List<B2BUnitPartnershipModel>> map = set.stream().collect(Collectors.toMap(Function.identity(), unit -> new ArrayList<>()));