@evgenyt2000

Как привести ArrayList к List?

Добрый день!
Ситуация следующая Есть результат одного модуля в виде
static public ArrayList<Pair<String, String>> words = new ArrayList<>();

Но эти результаты мне нужны в виде
public List <Lexeme> lexemeList
где
public class Lexeme {
    LexemeTypes type;
    String value;
 
    public Lexeme(LexemeTypes type, String value) {
        this.type = type;
        this.value = value;
    }
 
    public Lexeme(LexemeTypes type, Character value) {
        this.type = type;
        this.value = value.toString();
    }
    public Lexeme(LexemeTypes type, Integer value) {
        this.type = type;
        this.value = value.toString();
    }
 
    @Override
    public String toString() {
        return "Lexeme{" +
                "value='" + value + '\'' +
                ", type=" + type +
                '}';
    }
  • Вопрос задан
  • 142 просмотра
Решения вопроса 1
@WaterSmith
Android-разработчик. Java, Kotlin
Вам подошло бы что-то вроде:
List<Lexeme> result=Lexemes.words.stream().map(
pair -> new Lexeme(pair.getKey(), pair.getValue())
).collect(Collectors.toList());

Если бы у вас type был строкой а не LexemeTypes
Поскольку что такое LexemeTypes вы в вопросе не указали, остается только догадываться. Например, это Enum
тогда получится так:
List<Lexeme> result=Lexemes.words.stream().map(
pair -> new Lexeme(LexemeTypes.valueOf(pair.getKey()), pair.getValue())
).collect(Collectors.toList());

Но, правильнее будет создать еще один конструктор, который будет принимать строку в качестве type и сам знать, как её превратить в нужный LexemeTypes
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
zagayevskiy
@zagayevskiy Куратор тега Java
Android developer at Yandex
Используй Stream Api:
words.map(pair -> /* тут преобразуй пару в лексему по твоим правилам */).collect(Collectors.toList());
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
ОТП Банк Москва
от 240 000 до 270 000 ₽
Sportmaster Lab Санкт-Петербург
от 150 000 ₽
Эвотор Москва
от 180 000 до 250 000 ₽