2014-09-26 130 views
1

我在java中编写了一个方法,它需要输出ArrayList<String>。 在这种方法中,经常使用字符串串联。我使用StringBuilder而不是字符串,因为String在串联中更昂贵。java将ArrayList <StringBuilder>转换为ArrayList <String>

在返回结果之前,我怎样才能将ArrayList<StringBuilder>中的所有元素都投射到ArrayList<String>

+1

你的意思是:如何将'ArrayList '中的所有元素转换为'String'?你不能_cast_他们。 – 2014-09-26 01:53:50

+0

我重新提出了这个问题,因为[你如何将对象列表从一种类型转换为另一种类型的Java?](http://stackoverflow.com/questions/933447)涉及将超类型列表转换为子类型列表,而'StringBuilder'和'String'是无关的。 @SotiriosDelimanolis你现在可以添加你的'Stream#map'答案。 – 2014-09-26 02:14:07

回答

6

我怎么可能投在ArrayList<StringBuilder>所有元素ArrayList<String>

你不能,你不应该。使其成为一个或另一个ArrayList。

或者如果你必须翻译,那么你需要一个for循环遍历集合,构建新的集合。

或者我想你可以声明这个变量为ArrayList<? extends CharSequence> - 不行,因为我们不能将add(...)任何东西变成协变结构,所以我们不能添加任何东西到这个列表,只需从它读取。

+1

使用新的'Stream#map(Function)'功能! – 2014-09-26 01:58:21

+1

@SotiriosDelimanolis:我对此并不熟悉 - 请用这些信息作出回答,以便我们都可以学习! – 2014-09-26 01:59:50

+1

@HovercraftFullOfEels Sotirios意思就像'List listOfString = listOfStringBuffers.stream()。map(builder-> builder.toString())。collect(Collectors.toList())''。顺便说一下,lambda表达式'builder-> builder.toString()'也可以写成'StringBuilder :: toString'。 – Pshemo 2014-09-26 02:16:12

相关问题