2014-09-26 2 views
1

Я пишу метод в java, который требует в качестве вывода ArrayList<String>. В этом методе часто используется конкатенация строк. Я использую StringBuilder вместо String, так как String дороже в конкатенации.java cast ArrayList <StringBuilder> to ArrayList <String>

Перед тем как вернуть результат, как я мог отбросить все элементы в ArrayList<StringBuilder> до ArrayList<String>?

+1

Вы имеете в виду: как я могу выделить все элементы в 'ArrayList ' to 'String'? Вы не можете _cast_ их. –

+0

Я снова открыл вопрос, потому что [Как вы отсылаете список объектов из одного типа в другой в Java?] (Http://stackoverflow.com/questions/933447) относится к тому, чтобы перечислить список супертипов в список подтипов, тогда как 'StringBuilder' и' String' не связаны. @SotiriosDelimanolis, вы могли бы добавить свой ответ 'Stream # map'. –

ответ

6

Как я могу отличить все элементы в ArrayList<StringBuilder> до ArrayList<String>?

Вы не можете и не должны. Сделайте его ArrayList того или другого.

Если вам необходимо перевести, вам понадобится цикл for, чтобы перебирать коллекцию, создавая новую коллекцию.

или я полагаю, вы можете объявить переменную как ArrayList<? extends CharSequence> - Нету, что не будет работать, как мы, так как мы отверг не add(...) ничего в ковариантной структуры, таким образом, мы не были бы в состоянии добавить что-нибудь в этот список, просто прочитайте его.

+1

Используйте новую функциональность '' Списка # (функция) '! –

+1

@SotiriosDelimanolis: Я не знаком с этим - пожалуйста, ответьте на эту информацию, чтобы мы все смогли узнать! –

+1

@HovercraftFullOfEels Sotirios означал что-то вроде 'List listOfString = listOfStringBuffers.stream(). Map (builder-> builder.toString()). Collect (Collectors.toList())'. BTW lambda выражение 'builder-> builder.toString()' также может быть записано как 'StringBuilder :: toString'. – Pshemo

Смежные вопросы