java lambda表达式 if_Java8 Lambda表达式的使用

参考

为什么要用Lambda表达式?

Lambda表达式可以让我们用较少的代码来实现更多的功能,尤其在Java这种相对来说比较“啰嗦”的语言中,是一把提高效率的利器。

演变过程

把官网上提供的demo拿过来

实体类

@Data

@AllArgsConstructorpublic classPerson {public enumSex {

MALE,FEMALE;

}privateString name;privateLocalDate birthday;privateSex gender;privateString emailAddress;privateInteger age;public voidprintPerson() {

System.out.println(this.toString());

}

}

需求

现在我们需要实现一个功能,按照某种标准,从Person的集合中,挑选出符合条件的对象。

写法一

/*** 第一种写法,所有的判断方法耦合在一起*/

public classPrintTest {//大于指定年龄即可

public static void printPersonOlderTan(List roster, intage) {for(Person person : roster) {if(person.getAge() >age) {

person.printPerson();

}

}

}//在某个年龄区间内

public static void printPersonWithinAgeRange (List roster, int low, inthigh) {for(Person person : roster) {if(low <= person.getAge() && person.getAge()

person.printPerson();

}

}

}

}

根据不同的要求写多个方法,不够灵活,重复代码较多。

写法二

上述代码存在的问题是,如果筛选的条件改变了,我们就需要写一个新的方法。

所以,思考一下我们可不可以把变化的部分单独拿出来。

public interfaceCheckPerson {booleantest(Person person);

}

public class CheckPersonEligibleForSelectiveService implementsCheckPerson{

@Overridepublic booleantest(Person person) {return person.getGender() == Person.Sex.MALE && person.getAge() >= 17 && person.getAge() <= 25;

}

}

/*** 将判断条件抽象成方法*/

public classPrintPerson {public static void printPerson(Listroster, CheckPerson tester) {for(Person person : roster) {if(tester.test(person)) {

person.printPerson();

}

}

}

将筛选条件封装成表示算法的类,当有新的需求下来的时候,可以根据不同的需要编写对应的类,实现 CheckPerson接口,重写test方法即可。

将不同的算法封装起来,实现同一个接口,利用java的多态,根据不同的需求指定对应的算法,这就是策略设计模式。

调用该方法

public classPrintPersonTest {public static voidmain(String[] args) {

Person person1= new Person("test1", null, Person.Sex.MALE, "[email protected]", 12);

Person person2= new Person("test2&

你可能感兴趣的:(java,lambda表达式,if)