2014-09-26 123 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

相關問題