Можно ли преобразовать ArrayList <String> в ArrayList <CustomModel>?

Я сохраняю список ArrayList в Sharedpreferences. Но я хочу установить свою пользовательскую модель в ArrayList в адаптере, чтобы получить элементы с помощью геттера. Мне действительно надоело слишком много решений от stackoverflow, но я не мог этого сделать.

private ArrayList<String> fullList = new ArrayList<>();

к

private ArrayList<MyCustom> fullList = new ArrayList<>();

Мой индивидуальный класс:

public class InstagramUserSummary implements Serializable {
public boolean is_verified;
public String profile_pic_id;
public boolean is_favorite;
public boolean is_private;
public String username;
public long pk;
public String profile_pic_url;
public boolean has_anonymous_profile_picture;
public String full_name;

@Override
public int hashCode() {
    return Objects.hash(username, pk);
}

@Override
public boolean equals(Object obj) {

    if (obj == this) return true;
    if (!(obj instanceof InstagramUserSummary)) {
        return false;
    }

    InstagramUserSummary user = (InstagramUserSummary) obj;
    return pk == user.getPk();

}}

Список выглядит так:

[InstagramUserSummary(super=dev.niekirk.com.instagram4android.requests.payload.InstagramUserSummary@a4acf205, is_verified=false, profile_pic_id=1773528799482591987_1654599017, is_favorite=false, is_private=false, username=ququletta, pk=1654599017, profile_pic_url=https://instagram.fada1-5.fna.fbcdn.net/vp/8d99014623ed527e52512a20002d884b/5C387E45/t51.2885-19/s150x150/31203725_200759604054857_5778864946146181120_n.jpg, has_anonymous_profile_picture=false, full_name=Ququletta)]

Спасибо.

поделитесь своим классом MyCustom с вопросом

AskNilesh 01.09.2018 13:11

что такое MyCustom?

xingbin 01.09.2018 13:11

Пожалуйста, поделитесь кодом класса модели MyCustom.

Ümañg ßürmån 01.09.2018 13:14

Здравствуй. Я поделился извинениями за это.

user10303165 01.09.2018 13:17

Итак, вы хотите получить список имен пользователей?

akortex 01.09.2018 13:19

Да, но я не могу.

user10303165 01.09.2018 13:19

В качестве примечания: в вашем случае я бы использовал ListAdapter.

Piotr Aleksander Chmielowski 01.09.2018 13:45

В вашем классе адаптера будет много модификаций

Ümañg ßürmån 01.09.2018 13:53

Пожалуйста, вставьте свой класс Activity / Fragment, из которого вызывается адаптер.

Ümañg ßürmån 01.09.2018 13:54
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
1
9
63
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Решение:

Предположим, у вас есть строковая переменная в классе MyCustom, например:

public class MyCustom {

    private String strName;

    public MyCustom(String name) {
        this.strName = name;
    }

    public void setName(String name) {
        this.strName = name;
    }

    public String getName() {
         return this.strName;
    }
}

тогда вы можете сделать что-то вроде этого:

for (MyCustom value : fullList) {
    customFullList.add(new MyCustom(value))
}

Надеюсь, поможет.

Можете ли вы еще раз проверить мой собственный класс, пожалуйста

user10303165 01.09.2018 15:34

@Nina Ваш настраиваемый класс имеет много переменных разных типов данных, но в вашем вопросе говорится, что нужно преобразовать только String ArrayList в Custom arrayylist, что можно сделать только в том случае, если в вашем настраиваемом классе есть только строковая переменная. Надеюсь, вы уловили мою точку зрения.

Ümañg ßürmån 01.09.2018 15:42

@Nina Пожалуйста, проголосуйте и за это, так как это может помочь другим .. Спасибо;)

Ümañg ßürmån 01.09.2018 16:37

Прежде всего, нет необходимости, чтобы поле username было публичным членом класса MyCustom. Поскольку вы открываете доступ к полю через геттеры / сеттеры, делать его общедоступным - неправильно.

Помимо этого, вы можете легко использовать потоки и функцию сопоставления для создания нового экземпляра MyCustom из Stream of String.

Чтобы избежать шаблонного кода, я бы создал статический метод создателя в MyCustom следующим образом:

public class MyCustom {

    private String userName;
    public String getUserName() { return userName; }
    public void setUserName(String userName) { this.userName = userName; }

    public static MyCustom from(final String userName) {
        MyCustom custom = new MyCustom();
        custom.setUserName(userName);
        return custom;
    }

}

А затем я бы использовал это как ссылку на метод для преобразования Strings в MyCustoms, таким образом, собирая их в новый список, подобный этому:

List<String> list = new ArrayList<>();
List<MyCustom> customs = list.stream()
        .map(MyCustom::from)
        .collect(Collectors.toList());

Наконец, также избегайте инициализации списков с использованием конкретного типа (например, ArrayList<String> someList = new ArrayList<>;'. Намного лучше кодировать интерфейсы, делая что-то вроде List<String> someList = new ArrayList<>.

Другие вопросы по теме