2017-01-14 1 views
1

Есть много QA сообщений на подобные темы, как:Как преобразовать список сырья типа данных в список <String> с помощью Java 7 (и ниже) только

Java: Converting lists of one element type to a list of another type

How to transform List to another List

Однако, все они используют некоторые дополнительные библиотеки, которые не подходят в моем случае. Я хотел бы найти оптимальное решение, используя только Java 7 (и ниже) libs.

Так скажем мы в:

List list = new LinkedList(); 
list.add(2); 
list.add("Mike"); 
list.add("John"); 
list.add(11); 

transformer(list); // transform List to List<String> 
list.get(0).toLowerCase(); 

Как реализовать void transform(List list) метод?

+0

Возможный дубликат http://stackoverflow.com/questions/7383624/how-to-transform-listx-to-another-listy или http: // stackoverflow.com/questions/18524/java-best-way-of-converting-listinteger-to-liststring –

+0

@J. Pichardo это не публикация, потому что сообщение, которое вы упоминаете, учитывает решения с использованием других библиотек. –

+0

@JeanLee Посмотреть второй –

ответ

1

Вам нужно будет вернуть новый List<String> и назначить его. Итерируйте вход List и вызовите toString() на каждый элемент - добавив, что к новому List для возврата. Нечто подобное,

public static List<String> transformer(List list) { 
    List<String> al = new ArrayList<String>(); 
    Iterator iter = list.iterator(); 
    while (iter.hasNext()) { 
     al.add(iter.next().toString()); 
    } 
    return al; 
} 

Тогда вы можете назвать это как

List<String> stringList = transformer(list); 
stringList.get(0).toLowerCase(); 
+0

Это приведет к сбою с примитивными значениями –

+0

@ J.Pichardo. Примитивные значения не могут быть добавлены в коллекцию. Они автоматически привязаны к типам обертки. –

+0

@ ElliotFrisch Правильно я забыл спасибо –

3

Вы можете перейти на содержание в списке и называют String.valueOf(Object) каждого один:

List<String> result = new LinkedList<>(); 
for (Object o : list) { 
    result.add(String.valueOf(o)); 
} 

EDIT:
Это может также быть сделано рядный с ListIterator, если вы так склонны:

ListIterator iter = list.listIterator(); 
while (iter.hasNext()) { 
    iter.set(String.valueOf(iter.next())); 
} 
+0

@Mureinik Thx для вашего внимания. но мне нужно, чтобы вход и результат были одинаковыми в моем случае 'list'. –

+0

@JeanLee Я также обновил свой ответ, чтобы включить такой пример. – Mureinik

0

Вы не можете сделать то, что вам нужно. Тем не менее, вы можете получить доступ к методам String, написав что-то вроде этого stringList.get(0).toLowerCase();

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