java 函数式编程小记

stream api比较简单
函数式接口的设计 不是很好理解,记一个复杂的情况

    @FunctionalInterface
    public interface ProductSpec {
        boolean satisfy(Long p);

        // 此处的p 是satisfy的参数p
        static ProductSpec color(BigDecimal decimal) {
            return p -> p.longValue() == decimal.longValue();
        }

    }

    public void testSatisfy(ProductSpec productSpec) {
        productSpec.satisfy(111L);
    }

    public void test() {
        BigDecimal bigDecimal = new BigDecimal(12);
        // 第一种
        testSatisfy(new ProductSpec() {
            @Override
            public boolean satisfy(Long p) {
                return p.longValue() == bigDecimal.longValue();
            }
        });

        // 第二种
        testSatisfy(p -> p.longValue() == bigDecimal.longValue());

        // 第三种
        testSatisfy(ProductSpec.color(bigDecimal));
    }

如上 第三种一开始确实不好理解。。。但是代码却可以高复用,相比较简介

你可能感兴趣的:(java 函数式编程小记)