TransWikia.com

Взять из всех строк символ до точки и занести в лист

Stack Overflow на русском Asked on November 29, 2020

List<String> list = new ArrayList<>();
list.add("1. Текст1");
list.add("2. Текст2. продолжение текста");
list.add("3. Текст3. еще текст. и еще текст");

Нужно создать отдельный список List<Long> id, в котором будут номера по порядку с каждой строчки.

Можно ли сделать это через stream API? Вроде:

List<Long> id = list.stream
                    .map(i -> i.split("\.")

…вот дальше не пойму как…

2 Answers

Здесь можно без регулярных выражений обойтись, с помощью метода String.indexOf:

List<String> strings = new ArrayList<>();
strings.add("1. Текст1");
strings.add("2. Текст2. продолжение текста");
strings.add("3. Текст3. еще текст. и еще текст");

List<Long> longs = strings.stream()
        // выбираем подстроку с начала
        // строки до первой точки
        .map(e -> e.substring(0, e.indexOf('.')))
        // преобразовываем String в Long
        .mapToLong(Long::valueOf).boxed()
        // собираем в лист
        .collect(Collectors.toList());

System.out.println(longs); // [1, 2, 3]

Или можно одним Stream.map обойтись:

List<Long> longs = strings.stream()
        // преобразовываем в Long подстроку
        // с начала строки до первой точки
        .map(e -> Long.parseLong(e.substring(0, e.indexOf('.'))))
        // собираем в лист
        .collect(Collectors.toList());

Answered by user417380 on November 29, 2020

Можно.

Попробуйте:

List<String> list = new ArrayList<>();
list.add("1. Текст1");
list.add("2. Текст2. продолжение текста");
list.add("3. Текст3. еще текст. и еще текст");

List<Long> ids = list
        .stream()
        .map(i -> Long.valueOf(i.split("\.")[0]))
        .collect(Collectors.toList());
System.out.println(ids);
// [1, 2, 3]

Answered by gil9red on November 29, 2020

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP