Использование Stream API для списка

102
28 декабря 2021, 20:50

подскажите решение следующей задачи, имеется список

TreeList<String[]>mans

каким образом используя Striam API можно создать список

TreeList<String>name

куда поместить все первые элементы массивов входящих в список mans? Я понимаю что можно просто пройтись циклом, но ищу решение с помощью Stream API.

Answer 1

Для ArrayList(Суть та же):

ArrayList<String[]> mans = new ArrayList<>();
mans.add(new String[] {"1hi", "", "2hi", "", "3hi"});
mans.add(new String[] {"4hi", "5hi", "6hi"});
mans.stream()
    .map(a -> {
        StringBuilder toReturn = new StringBuilder("");
        for(String string : a) {
            if(!string.isEmpty()) {
                toReturn.append(string.substring(0, 1));
            }
        }
        return toReturn.toString();
    })
    .forEach(System.out::println);

Оптимизированный вариант:

mans.stream()
    .map(a -> {
        char[] firstChars = new char[a.length];
        int countOfEmpty = 0;
        for(int i = 0; i < firstChars.length - countOfEmpty; i++) {
            if(!a[i + countOfEmpty].isEmpty()) {
                firstChars[i] = a[i + countOfEmpty].charAt(0);
            } else {
                i--;
                countOfEmpty++;
            }
        }
        return new String(firstChars).substring(0, firstChars.length - countOfEmpty);
    })
    .forEach(System.out::println);

Оба выводят следующее:

123
456

А собрать в один список вы можете заменив forEach() на collect(), в котором можно преобразовать поток строк в нужную вам коллекцию

READ ALSO
Автоматическое обновление данных из БД на странице

Автоматическое обновление данных из БД на странице

Реализую небольшой maven-проект с выводом данных из БДПроект основан на MVC архитектуре и суть его такова: на главной странице (index

201
ошибка IOException

ошибка IOException

приложение должно сохранять файл с логином и паролем, затем при открытии приложения или при вводе данных проверять пароль, если он совпадает...

162
Сортировка списка массивов

Сортировка списка массивов

Имеется список содержащий массивы

228
Сортировка одинаковых фамилий

Сортировка одинаковых фамилий

Имеется следующий код

218