Java 向映射添加值时类型不兼容

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)

我有一个用矩形填充的ArrayList。我想在地图上添加内容,其中键是X坐标,值是具有相同X线的列表

我可以通过一个函数来实现这一点

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,工作列表);

无论如何,我会推荐这样一种风格。有时,人们认为把尽可能多的陈述放在一行是“伟大的”;但问题是:代码应该是可读的。实际上,我认为我的建议比你最初的建议更容易理解。

谢谢你的建议。谢谢你的建议。