gpt4 book ai didi

java - 向 Map 添加值时类型不兼容

转载 作者:行者123 更新时间:2023-11-29 06:29:32 25 4
gpt4 key购买 nike

我有一个用矩形填充的 ArrayList。我想将内容添加到 Map,其中 Key 是 X 坐标,value 是具有相同 X 线的 List。

我可以通过一个函数来做到这一点

void dummyFun(List<Rectangle> listRects)
{
Map<Integer, List<Rectangle>> mapSameXCordRectangles = new HashMap<>();
listRects.forEach((Rectangle table) ->
{
if(mapSameXCordRectangles.containsKey(table.x))
{
mapSameXCordRectangles.get(table.x).add(table);
}
else
{
List<Rectangle> lstRect = new ArrayList<>();
lstRect.add(table);
mapSameXCordRectangles.put(table.x, lstRect);
}
});
}

但我想删除 if-else 语句,如下所示。

void dummyFun1(List<Rectangle> listRects)
{
Map<Integer, List<Rectangle>> mapSameXCordRectangles = new HashMap<>();
List<Rectangle> lstTemp = new ArrayList<>();
listRects.forEach((Rectangle table) ->
{
mapSameXCordRectangles.put(table.x,mapSameXCordRectangles.containsKey(table.x) ? mapSameXCordRectangles.get(table.x).add(table): new ArrayList<>().add(table));
});
}

执行此操作时出现错误,因为 boolean 值无法转换为列表。当我将新的 Rectangle 添加到 map 中的 ArrayList 或创建新的 ArrayList 时,它返回 boolean 值而不是我希望它返回 ArrayList。

我该怎么做?

最佳答案

让我们看一下您的代码:

mapSameXCordRectangles.put(
table.x,
mapSameXCordRectangles.containsKey(table.x) ?
mapSameXCordRectangles.get(table.x).add(table) :
new ArrayList<>().add(table));

您的 boolean 值 ?: 工作正常;你的问题是:调用 List.add()返回一个 boolean 值。而且您的 map 根本不接受 boolean 值!

避免该问题的一种选择:使用一些临时列表对象来处理:

List<Rectangle> workingList =
mapSameXCordRectangles.containsKey(table.x) ?
mapSameXCordRectangles.get(table.x) :
new ArrayList<>());
workingList.add(table);
mapSameXCordRectangles.put(
table.x, workingList);

无论如何我都会推荐这样的风格。有时人们认为将尽可能多的语句放入一行是“很棒的”;但问题是:代码应该写得可读。事实上,我认为我在这里的建议也比您最初的输入更容易理解。

关于java - 向 Map 添加值时类型不兼容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40216879/

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