提问者:小点点

对于从地图中填充列表,有没有更优雅的解决方案?


我试着从地图上填满清单。 如果列表是null,我将创建一个新列表并添加一个新创建的元素,否则将该元素添加到现有列表中。

我想知道JAVA8中是否有更优雅的解决方案。 感谢任何帮助。

Map<String, List<MyObject>> myMap = new HashMap<>();
List<MyObject> list = myMap.get("key");
myMap.put("key", list == null ? Arrays.asList(new MyObject()) : Arrays.asList(list, new MyObject()));

共2个答案

匿名用户

假设arrays.asList(list,new MyObject())应该向list添加一个新的MyObject实例,那么是的,您可以使用Map#ComputeIfAbsent使代码更具可读性:

Map<String, List<MyObject>> myMap = new HashMap<>();
myMap.computeIfAbsent("key", key -> new ArrayList<>()).add(new MyObject());

如果“key”映射中不作为键存在,则将创建到新的ArrayList实例(返回)的映射。 否则,现有的list将由对ComputeIfAbsent的调用返回,从而允许您向其中添加新元素。

匿名用户

您可以简单地确保您的get在一开始就不会返回null:

List<MyObject> list = myMap.getOrDefault("key", new ArrayList<>);

然后你就会以

List<MyObject> list = myMap.getOrDefault("key", new ArrayList<>);
list.add(new MyObject());
myMap.put("key", list);