Java 向映射添加值时类型不兼容
我有一个用矩形填充的ArrayList。我想在地图上添加内容,其中键是X坐标,值是具有相同X线的列表 我可以通过一个函数来实现这一点Java 向映射添加值时类型不兼容,java,dictionary,arraylist,Java,Dictionary,Arraylist,我有一个用矩形填充的ArrayList。我想在地图上添加内容,其中键是X坐标,值是具有相同X线的列表 我可以通过一个函数来实现这一点 void dummyFun(List<Rectangle> listRects) { Map<Integer, List<Rectangle>> mapSameXCordRectangles = new HashMap<>(); listRects.forEach((Rectangle table)
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);
}
});
}
void dummyFun(列表rects)
{
Map mapSameXCordRectangles=新HashMap();
forEach((矩形表)->
{
if(mapSameXCordRectangles.containsKey(表x))
{
mapsamexcordrectals.get(table.x).add(table);
}
其他的
{
List lstRect=new ArrayList();
lstRect.add(表);
MapSamexCordRectanges.put(表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));
});
}
void dummyFun1(列表项)
{
Map mapSameXCordRectangles=新HashMap();
List lstemp=new ArrayList();
forEach((矩形表)->
{
MapSamExCordRectanges.put(table.x,MapSamExCordRectanges.containsKey(table.x)?MapSamExCordRectanges.get(table.x).add(table):new ArrayList().add(table));
});
}
当我这样做时,我会得到错误,因为布尔值不能转换为列表。
当我在地图中向ArrayList添加新矩形或创建新ArrayList时,它返回布尔值,而不是我希望它返回ArrayList
我该怎么做呢?我建议您使用
Map Map=listRects.stream()
.collect(收集器.groupingBy(r->r.x));
我建议您使用
Map Map=listRects.stream()
.collect(收集器.groupingBy(r->r.x));
让我们看看您的代码:
mapSameXCordRectangles.put(
table.x,
mapSameXCordRectangles.containsKey(table.x) ?
mapSameXCordRectangles.get(table.x).add(table) :
new ArrayList<>().add(table));
mapSameXCordRectangles.put(
表十,
mapSameXCordRectangles.containsKey(表x)?
mapSameXCordRectangles.get(table.x).add(table):
新建ArrayList().add(表));
你的布尔?:工作正常;您的问题是:调用返回一个布尔值。而且你的地图根本不接受布尔值
避免该问题的一个选项是:使用一些临时列表对象来处理:
List<Rectangle> workingList =
mapSameXCordRectangles.containsKey(table.x) ?
mapSameXCordRectangles.get(table.x) :
new ArrayList<>());
workingList.add(table);
mapSameXCordRectangles.put(
table.x, workingList);
列表工作列表=
mapSameXCordRectangles.containsKey(表x)?
mapSameXCordRectangles.get(table.x):
新的ArrayList());
工作列表。添加(表格);
mapSameXCordRectangles.put(
表x,工作列表);
无论如何,我会推荐这样一种风格。有时,人们认为把尽可能多的陈述放在一行是“伟大的”;但问题是:代码应该是可读的。实际上,我认为我的建议比您最初的输入更容易理解。让我们看看您的代码:
mapSameXCordRectangles.put(
table.x,
mapSameXCordRectangles.containsKey(table.x) ?
mapSameXCordRectangles.get(table.x).add(table) :
new ArrayList<>().add(table));
mapSameXCordRectangles.put(
表十,
mapSameXCordRectangles.containsKey(表x)?
mapSameXCordRectangles.get(table.x).add(table):
新建ArrayList().add(表));
你的布尔?:工作正常;您的问题是:调用返回一个布尔值。而且你的地图根本不接受布尔值
避免该问题的一个选项是:使用一些临时列表对象来处理:
List<Rectangle> workingList =
mapSameXCordRectangles.containsKey(table.x) ?
mapSameXCordRectangles.get(table.x) :
new ArrayList<>());
workingList.add(table);
mapSameXCordRectangles.put(
table.x, workingList);
列表工作列表=
mapSameXCordRectangles.containsKey(表x)?
mapSameXCordRectangles.get(table.x):
新的ArrayList());
工作列表。添加(表格);
mapSameXCordRectangles.put(
表x,工作列表);
无论如何,我会推荐这样一种风格。有时,人们认为把尽可能多的陈述放在一行是“伟大的”;但问题是:代码应该是可读的。实际上,我认为我的建议比你最初的建议更容易理解。谢谢你的建议。谢谢你的建议。