gpt4 book ai didi

java - 使用 Collectors 将 Steam 拆分为基于 Java 类的列表

转载 作者:行者123 更新时间:2023-12-03 21:28:05 24 4
gpt4 key购买 nike

下面的代码是一个伪代码,表示我要实现的目标:

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);

以上是简化的代码。我想要的是我有一个输入列表,我想根据对象的类将它分成多个列表。

但是上面的代码无法编译,我想知道你该如何修复它?

最佳答案

可以通过更改 List<?> 来修复第一行至 List<Object> :

Map<Class<?>, List<Object>> map = Stream.of(1, "2")
.collect(Collectors.groupingBy(Object::getClass));

接下来的几行问题更大。我不认为有任何方法可以在 Java 中定义这种通用关系。你将不得不使用丑陋的、不安全的转换:

List<Integer> ints = (List)map.get(Integer.class);
List<String> strings = (List)map.get(String.class);

如果你想让它更安全和用户友好,你可以把它隐藏在一个自定义类后面:

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;
}
}

关于java - 使用 Collectors 将 Steam 拆分为基于 Java 类的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42714200/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com