为了账号安全,请及时绑定邮箱和手机立即绑定

提取 ArrayList<String> 的元素作为 Hashmap 的一部分

提取 ArrayList<String> 的元素作为 Hashmap 的一部分

qq_笑_17 2021-10-13 17:25:19
我有以下代码:for (Map.Entry < Integer, ArrayList < String >> entry: data.entrySet()) {    Integer key = entry.getKey();    ArrayList < String > value = entry.getValue();    for (String aString: value) {        System.out.println("key : " + key + " value : " + aString);    }}Hashmap 声明为Map<Integer, List<String>> data = new HashMap<>();在通过循环和put方法填充它之前。我现在需要迭代ArrayList字符串或更好地,通过索引检索特定元素 .. 进行操作。我已经尽我所能进行了研究,似乎已经找到了答案,上面的代码。它是从前段时间在这里给出的答案中复制的。但是,当我尝试使用它时,它会抱怨“不兼容的类型”,顶行用红色下划线直到冒号。必需的: Entry <Integer,java.util.List<java.lang.String>>成立: Entry <Integer,java.util.ArrayList<java.lang.String>>
查看完整描述

3 回答

?
隔江千里

TA贡献1906条经验 获得超10个赞

在你的情况下,你有List接口和ArrayList实现,你List在地图的声明中正确使用了类型,但是你传递到ArrayList在循环中声明一个 implementationaion( )。

问题出现是因为以下语句:

Map<Integer, List<String>> data = new HashMap<>();

空菱形符号为List<String>. 它可以是 ArrayList、LinkedList 等。所以你不能确定编译器会使用ArrayList实现。

为了支持代码可扩展性,建议进行所谓的针对接口的编程。只要可以避免将代码耦合到特定的实现,维护最通用的类型总是好的,也就是说,当您需要对其执行一些具体操作时,您将指定实现。


查看完整回答
反对 回复 2021-10-13
?
慕后森

TA贡献1802条经验 获得超5个赞

因为你已经宣布在价值型Hashmap 的List<String>,你给ArrayList<String>的值类型 Map.Entryfor loop

更改 Map<Integer, List<String>> data = new HashMap<>();为 Map<Integer, ArrayList<String>> data = new HashMap<>();


查看完整回答
反对 回复 2021-10-13
?
哔哔one

TA贡献1854条经验 获得超8个赞

试试下面的代码:


for (Map.Entry<Integer, List<String>> entry : data.entrySet()) {

       Integer key = entry.getKey();

       List<String> value = entry.getValue();

       for(String aString : value){

            System.out.println("key : " + key + " value : " + aString);

            }


查看完整回答
反对 回复 2021-10-13
  • 3 回答
  • 0 关注
  • 178 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信