Подтвердить что ты не робот

Как преобразовать список <String> в список <Object>

Я хочу преобразовать List<String> в List<Object>.

Один из существующих методов возвращает List<String>, и я хочу преобразовать его в List<Object>. Есть ли прямой путь в Java, а затем итерация и преобразование элемента по элементу?

4b9b3361

Ответ 1

Передайте List<String> в качестве параметра конструктору нового ArrayList<Object>.

List<Object> objectList = new ArrayList<Object>(stringList);

Любой Collection может быть передан как аргумент конструктору, пока его тип расширяет тип ArrayList, так как String extends Object. Конструктор принимает значение Collection, но List является подпоследователем Collection, поэтому вы можете просто использовать List<String>.

Ответ 2

Любая коллекция java - это просто набор объектов, будь то строка или другая. Аргумент типа - это просто сахар. В зависимости от ситуации, например, имея дело с очень большими списками, вы можете просто ее преобразовать - очевидно, рискуя смешивать два разных типа объектов в одном списке.

List<Object> objectList = (List)stringList;

И поставьте @SuppressWarning, чтобы избавиться от гадостей...

Ответ 3

Лично, в то время как оба в настоящее время высоко оцененные ответы правильны в некотором смысле, я не думаю, что любой из них решает проблему элегантным, многоразовым способом, особенно если вам нужно делать это очень часто.

Предположим, что у вас есть старый старый код/​​зависимость, который вы никак не можете изменить (чтобы он, по крайней мере, принял List<? extends Object>, как @ReverendGonzo предложил в своем комментарии Предположим также, что вам нужно много поговорить с этим устаревшим модулем.

Я не думаю, что любое литье/копирование все время было бы терпимым в долгосрочной перспективе. Это делает ваш код уязвимым для коварных ошибок и трудно следовать или слегка (или резко) неэффективно и трудно читается.

Чтобы иметь читаемый и эффективный производственный код, лучше инкапсулировать грязную часть в отдельный модуль, который имеет дело с иным безобидным, но уродливым литом.

class ProductionCode {
    public void doJob() {
        List<String> strings = Arrays.asList("pear", "apple", "peach");
        StringMagicUtils.dealWithStrings(strings);
    }
}

class StringMagicUtils {
    @SuppressWarnings("unchecked")
    public static void dealWithStrings(List<String> strings) {
        ExternalStringMagic.dealWithStringsAsObjects((List) strings);
    }
}

// Legacy - cannot edit this wonderful code below ˇˇ
class ExternalStringMagic {
    public static void dealWithStringsAsObjects(List<Object> stringsAsObjects) {
        // deal with them as they please
    }
}

Ответ 4

Это довольно неэффективно, но по крайней мере вам не нужно писать много кода ~

List<String> stringList = new ArrayList<String>();
List<Object> objectList = Arrays.asList(stringList.toArray());

Ответ 5

List<Object> ofObjects = new ArrayList<Object>(ofStrings);

как в:

import java.util.*;
class C { 
  public static void main( String[] args ) { 
     List<String> s = new ArrayList<String>();
     s.add("S");
     List<Object> o = new ArrayList<Object>(s);
     o.add( new Object() );
     System.out.println(  o );

  }
}

В качестве альтернативы вы можете попробовать метод addAll, если список объектов - это существующий список.

Ответ 6

model.class

публичный класс Model {

private List<String> stringList = new ArrayList<>();

public List<String> getStringList() {
    return stringList;
}

public void setStringList(List<String> stringList) {
    this.stringList = stringList;
}

}

Основная деятельность

открытый класс MainActivity расширяет AppCompatActivity {

Model model = new Model();
Spinner spinner;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    spinner=findViewById(R.id.spinner);

    List<String> itemList = new ArrayList<String>();
    itemList.add("item1");
    itemList.add("item2");
    itemList.add("item3");


   model.setStringList(itemList);


    ArrayAdapter<String> dataAdapter = new ArrayAdapter<String>(this, android.R.layout.simple_spinner_item, model.getStringList());
    dataAdapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);

    spinner.setAdapter(dataAdapter);

}

}