use*_*188 2 java java-stream collectors
以下代码是一个伪代码,表示我想要实现的目标:
Map<Class<?>, List<?>> map = Stream.of(1, "2").collect(Collectors.groupingBy(Object::getClass));
List<Integer> ints = map.get(Integer.class);
List<String> strings = map.get(String.class);
Run Code Online (Sandbox Code Playgroud)
以上是简化的代码.我想要的是我有一个输入列表,我想根据对象的类将它拆分成多个列表.
但是上面的代码没有编译,我想知道你怎么能解决它?
第一行可以通过更改List<?>为List<Object>:
Map<Class<?>, List<Object>> map = Stream.of(1, "2")
.collect(Collectors.groupingBy(Object::getClass));
Run Code Online (Sandbox Code Playgroud)
下一行更有问题.我认为没有办法在Java中定义那种通用关系.你将不得不使用一个丑陋,不安全的演员:
List<Integer> ints = (List)map.get(Integer.class);
List<String> strings = (List)map.get(String.class);
Run Code Online (Sandbox Code Playgroud)
如果您想使它更安全和用户友好,您可以将其隐藏在自定义类后面:
class TypeToListMap {
private Map<Class<?>, List<Object>> map = ...
public <T> List<T> get(Class<T> key) {
@SuppressWarnings("unchecked")
List<T> result = (List<T>)map.get(key);
return result;
}
}
Run Code Online (Sandbox Code Playgroud)