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("\.")
…вот дальше не пойму как…
Здесь можно без регулярных выражений обойтись, с помощью метода 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
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP