Использование Stream API
for (String a : arr) {
if (!a.equals("")) {
dateValues.add(Integer.parseInt(a));
}
}
Добрый день, можно ли как-то данный цикл сделать с помощью Stream API ( делаю для себя, просто интересно )
Понимаю, что задача достаточная тривиальная, но с функциональным программированием у меня пока слабовато...
Я вижу это примерно как-то так, но я пока не смог понять, как убрать - "" силами Stream API
Arrays.stream(arr).forEach(a -> dateValues.add(Integer.parseInt(a)));
Либо, может быть кто-нибудь сможет подсказать :
Входные данные :
String date = "20/10/2020 - 20/09/2020"
С помощью
String[] arr = date.split("\\D+");
Формируется массив, в котором остаются следующие данные :
arr[0] = ""
arr[1] = 20
arr[2] = 10
arr[3] = 2020
....
и так-далее.
ВОПРОС : откуда берется arr[0] = ""? И можно ли как-то убрать его с помощью регулярки?
Ответы (3 шт):
List<Integer> dateValues = Arrays.stream(arr)
.filter(a -> !a.isEmpty())
.map(Integer::parseInt)
.collect(Collectors.toList());
Что-то такое? более понятное к вам
public static void main(String[] args) {
String date = "20/10/2020 - 20/09/2020";
String[] arr = date.split("\\D+");
List<Integer> dateValues = new ArrayList();
Arrays.asList(arr)
.stream().forEach(
item -> {
if (!item.equals("")) {
dateValues.add(Integer.parseInt(item));
}
});
System.out.println(dateValues);
}
Всем, спасибо. Немного подправил код
private List<LocalDateTime> dateConvertation(String date) {
String[] arr = date.split("\\D+");
List<Integer> dateValues = Arrays.stream(arr).filter(a -> !a.equals("")).map(Integer::parseInt).collect(Collectors.toList());
LocalDateTime startDateTime = LocalDateTime.of(dateValues.get(2), dateValues.get(1), dateValues.get(0), 0, 0);
LocalDateTime endDateTime = LocalDateTime.of(dateValues.get(5), dateValues.get(4), dateValues.get(3), 23, 59);
List<LocalDateTime> localDateTimeList = new ArrayList<>();
localDateTimeList.add(startDateTime);
localDateTimeList.add(endDateTime);
return localDateTimeList;
}