Java 我可以从一个对象获取一个列表,向其中添加一个字符串,然后在一行中将其设置回该对象吗?
我想知道是否可以从对象中获取Java 我可以从一个对象获取一个列表,向其中添加一个字符串,然后在一行中将其设置回该对象吗?,java,list,Java,List,我想知道是否可以从对象中获取列表,向其中添加一个项目,并将列表设置为对象的一行 我通常会这样做: List<String> tempList = someObject.getList(); tempList.add("some string value"); someObject.setList(tempList); 但后来我意识到,方法add()将返回一个布尔值,而方法setList()将获取一个List 有什么想法吗?据我所知,在一行中没有好的方法来做到这一点 如果您需要经常这
列表
,向其中添加一个项目,并将列表
设置为对象的一行
我通常会这样做:
List<String> tempList = someObject.getList();
tempList.add("some string value");
someObject.setList(tempList);
但后来我意识到,方法add()
将返回一个布尔值,而方法setList()
将获取一个List
有什么想法吗?据我所知,在一行中没有好的方法来做到这一点 如果您需要经常这样做,您可以修改
someObject
的类,使用addItem
方法直接执行此操作
或者,如果无法修改该类,则可以编写一个方法,用于添加到列表并返回列表:
static <E> List<E> add(List<E> list, E extra) {
list.add(extra);
return list;
}
静态列表添加(列表,E额外){
列表。添加(额外);
退货清单;
}
假设您没有在getList
中返回副本,它应该是相同的引用,因此您可以说
someObject.getList().add("some string value");
而且你不需要setList
返回,因为只有一个List仅仅因为你可以在一个语句中做一些事情,并不意味着你应该
但如果您不介意稍微滥用一下流,这当然是可能的:
Stream.of(someObject.getList())
.map(list -> new Pair<>(list.add(new Object()), list))
.forEach(pair -> someObject.setList(pair.getValue()));
Stream.of(someObject.getList())
.map(list->new Pair(list.add(new Object()),list))
.forEach(pair->someObject.setList(pair.getValue());
当然,真正的答案是,如果您想在一行中完成类似的操作,您只需编写一个方法,其中包含尽可能多的行以保持清晰,然后调用它(在一行中)。请您进一步解释它的工作原理。我不知道我们可以在Java中通过引用操作对象。Java总是按值传递,但对象(引用类型)的值是-a reference.+1表示简单的解决方案。我知道我可以做到这一点,但我想知道我是否可以不创建新方法直接做到这一点。
Stream.of(someObject.getList())
.map(list -> new Pair<>(list.add(new Object()), list))
.forEach(pair -> someObject.setList(pair.getValue()));