Введение
В потоковой обработке мы обычно сталкиваемся с суждением if/else.Как мы справляемся с такой проблемой?
Помните, что мы упоминали в прошлой статье лучшие практики лямбда-выражений о том, что лямбда-выражения должны быть максимально лаконичными, и не прописывать в них раздутую бизнес-логику.
Далее мы рассмотрим конкретный пример.
традиционное письмо
Предположим, у нас есть список от 1 до 10, и мы хотим выбрать нечетные и четные числа соответственно.Традиционно мы использовали бы это:
public void inForEach(){
List<Integer> ints = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
ints.stream()
.forEach(i -> {
if (i.intValue() % 2 == 0) {
System.out.println("i is even");
} else {
System.out.println("i is old");
}
});
}
В приведенном выше примере мы поместили логику if/else в forEach, хотя это не проблема, но код сильно раздут.
Посмотрим, как его переписать.
использовать фильтр
Мы можем переписать логику if/else в два фильтра:
List<Integer> ints = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
Stream<Integer> evenIntegers = ints.stream()
.filter(i -> i.intValue() % 2 == 0);
Stream<Integer> oddIntegers = ints.stream()
.filter(i -> i.intValue() % 2 != 0);
С этими двумя фильтрами используйте для каждого в потоке после фильтра:
evenIntegers.forEach(i -> System.out.println("i is even"));
oddIntegers.forEach(i -> System.out.println("i is old"));
Как, код очень лаконичен и понятен.
Суммировать
Лямбда-выражения должны быть максимально краткими, и мы можем использовать потоковые фильтры для замены бизнес-логики if/else.
Примеры этой статьиGitHub.com/Dadean2009/приходите…
Добро пожаловать, обратите внимание на мой публичный номер: вас ждут самые интересные вещи о программе! Для получения дополнительной информации, пожалуйста, посетитеwww.flydean.com