使用 lambda / 函数式接口 实现策略模式

import java.util.function.Predicate;
 
public class Sample {
 
    public static int totalValues(List<Integer> numbers,
            Predicate<Integer> selector) {
        int total = 0;
        for (var number : numbers) {
            if (selector.test(number)) {
                total += number;
            }
        }
        return total;        
    }
 
    public static boolean isOdd(int number) {
        return number % 2 != 0;
    }
 
    public static void main(String[] args) {
        var numbers = List.of(1,2,3,4,5);
        totalValues(numbers, Sample::isOdd);
        totalValues(numbers, ignore -> true);
        totalValues(numbers, number -> numeber % 2 == 0);
    }
}