懂得什么是行为参数化
http://www.tuicool.com/articles/yIv2Mjy
对比:
通过IntelliJ IDEA 2016.3 来更好使用Java 8的Stream API
归约
使用归约方法的有事和并行化:
相比于前面写的逐步迭代求和,使用reduce的好处在于,这里的迭代被内部迭代抽象掉了,这让内部实现得以选择并行执行reduce操作。而迭代式求和例子要更新共享变量sum,这不是那么容易并行化的。如果你加入了同步,很可能会发现线程竞争抵消了并行本应带来的性能提升!
java8 策略模式重构:P192
例子:对输入的内容进行验证或者格式化(比如只包含小写字母或者数字)。
// 此接口实际是一个函数接口
public interface ValidationStrategy {
boolean execute(String s);
}
// 两个实现类
public class IsAllLowerCase implements ValidationStrategy {
public boolean execute(String s) {
return s.matches("[a-z] +");
}
}
public class IsNumeric implements ValidationStrategy {
public boolean execute(String s) {
return s.matches("\\d+"");
}
}
/ / 定义一个类去使用
public class Validator{
private final ValidationStrategy strategy;
public Validator(ValidationStrategy v){
this.strategy = v;
}
public boolean validate(String s){
return strategy.execute(s);
}
}
// 实际业务中使用
Validator numericValidateor = new Validator(new IsNumeric());
boolean b1 = numericValidator.validate("aaaa");
Validator lowerCaseValidator = new Validator(new IsAllLowerCase());
boolean b2 = lowerCaseValidator.validate("bbbb");
使用Lambda表达式:
不需要编写两个实现类直接使用Lambda表达式:
Validator numericValidator = new Validator((String s) -> s.matches("[a-z]+"));
boolean b1 = numericValidaor.validate("aaaa");
Validator lowerCaseValidator = new Validator((String s) -> s.matches("\\d+"));
boolean b2 = lowerCaseValidator.validate("bbbb");
引入Optional类的意图并非消除每一个null引用。
创建Optional对象
1.声明一个空的Optional
Optional<Car> optCar = Optional.empty();
2.依据一个非空值创建Optional
Optional<Car> optCar = Optional.of(car);// 如果car是一个null,这段代码会立即抛出一个NullPointerException,而不是你访问car属性值时才返回一个错误。
3.可接受null的Optional
Optional<Car> optCar = Optional.ofNullable(car);
如果car是null,那么得到的Optional对象就是个空对象。
两层Optional嵌套必须使用flatMap
如果你引用第三方库是需要序列化的,使用Optional可能会出错。
如果您返回的的是OptionalInt(基础类型)类型的对象,你就不能将其作为方法引用传递给另一个Optional对象的flatMap方法
评论