JAVA8 in Action:行为参数化,匿名类及lambda表达式的初步认知实例整理
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了JAVA8 in Action:行为参数化,匿名类及lambda表达式的初步认知实例整理,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含5360字,纯文字阅读大概需要8分钟。
内容图文
import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.function.Predicate; /** * Created by Administrator on 2017/8/19 0013. */ public class Test { /*************************************JAVA8 in Action:行为参数化,匿名类及lambda表达式的初步认知实例整理*****************************/ /**首先了解的几个概念: * 1.行为参数化:就是一个方法接受多个不同的行为作为参数,并在内部是使用它们,完成不同行为的能力,是一种可以帮助你处理频繁的需求变更的一种软件开发模式; * 2.匿名类:与我们所熟悉的java局部类差不多,但是匿名类没有名字,它允许你同事声明并实例化一个类(随用随建); * 3.ambda表达式:由参数,箭头和主体组成,如:(Apple a1,Apple a2) -> a1.getWeight().compareTo(a2.getWeight()); * ----lambda参数------ -箭头- -------------lambda主体--------------- * */ //我们以实现从一个列表中筛选出绿苹果作为例子: //1.基础数据 //创建苹果实体类 class Apple{ private String color; private double weight; public String getColor() { return color; } public void setColor(String color) { this.color = color; } public double getWeight() { return weight; } public void setWeight(double weight) { this.weight = weight; } public Apple(String color, double weight) { this.color = color; this.weight = weight; } } //2.由浅入深的实例: //初级做法:仅仅只能用于选出绿色的苹果 public static List<Apple> chooseGreenApple(List<Apple> apples){ List<Apple> result = new ArrayList<Apple>();//用于盛放筛选出来的绿苹果的集合 for(Apple apple:apples){ if("green".equals(apple.getColor())){//选出绿苹果放入到集合中 result.add(apple); } } return result; } //一级拓展:以颜色作为参数,可以根据参数选出想要的颜色的苹果 public static List<Apple> choseAppleByColor(List<Apple> apples,String color){ List<Apple> result = new ArrayList<Apple>();//用于盛放筛选出来的绿苹果的集合 for(Apple apple:apples){ if(color.equals(apple.getColor())){//根据参数选出所需要的苹果放入到集合中 result.add(apple); } } return result; } //二级拓展,对多个属性进行筛选(如颜色,重量) public static List<Apple> chooseApples(List<Apple> apples,String color, double weight,boolean flag){//谓词flag用于区分根据颜色还是根据重量筛选 List<Apple> result = new ArrayList<Apple>();//用于盛放筛选出来的苹果的集合 for(Apple apple:apples){ //根据flag确定使用以哪个参数为依据来选出所需要的苹果放入到集合中 if((flag && color.equals(apple.getColor())) || (!flag && apple.getWeight() > weight)){ result.add(apple); } } return result; } //三级拓展,根据抽象条件进行筛选: //定义一个接口来对选择标准建模: public interface ApplePredicate{ boolean test (Apple apple); } //以ApplePredicate的多个不同的实现来代表不同的选择标准 //仅仅用来选出重的苹果 public class AppleHeavy implements ApplePredicate{ public boolean test (Apple apple){ return apple.getWeight() > 180; } } //如果仅仅用来选出绿色的苹果 public class AppleColor implements ApplePredicate{ public boolean test (Apple apple){ return "green".equals(apple.getColor()); } } //在利用ApplePredicte改过之后,该方法就变成了这个样子, // 我们在使用的时候只需要创建不同个ApplePredicate对象,将他传递给chooseApples方法即可,大大的增加了他的灵活性 public static List<Apple> chooseApples(List<Apple> apples, ApplePredicate predicate){ List<Apple> result = new ArrayList<Apple>();//用于盛放筛选出来的苹果的集合 for(Apple apple:apples){ if(predicate.test(apple)){ result.add(apple); } } return result; } //终极超级酷炫拓展,将List类型抽象化 public interface predicatre<T>{ boolean test(T t); } public static <T> List<T> chooseSomeThind(List<T> list, Predicate<T> p){ List<T> result = new ArrayList<T>(); for(T e:list){ if(p.test(e)){ result.add(e); } } return result; } @org.junit.Test public void testChooseAppleByWhatYouWant(){ //创建集合: List<Apple> appleList = Arrays.asList(new Apple("green",200),new Apple("red",150)); //初级做法:仅仅只能用于选出绿色的苹果 List<Apple> greenApples__1 = chooseGreenApple(appleList); //一级拓展:以颜色作为参数,可以根据参数选出想要的颜色的苹果 //例如筛选出红苹果: List<Apple> greenApples__2 = choseAppleByColor(appleList,"red"); //二级拓展,对多个属性进行筛选(如颜色,重量) //例如筛选出红苹果: List<Apple> greenApples__13 = chooseApples(appleList,"red",0,true); //例如筛选出重苹果: List<Apple> weightApples__1 = chooseApples(appleList,"",180,false); //三级拓展,根据抽象条件进行筛选: //例如筛选出绿苹果: List<Apple> greenApples = chooseApples(appleList,new AppleColor()); //例如筛选出重苹果: List<Apple> weightApples_1 = chooseApples(appleList,new AppleHeavy()); //四级拓展,使用匿名类同时声明和实例化一个类:(可以让你无需事先实例化,随用随建,提高效率) List<Apple> weightApples_2 = chooseApples(appleList, new ApplePredicate() { public boolean test(Apple apple) {return apple.getWeight() > 180;} }); //五级拓展,使用lambda表达式:(显得更加干净整洁) //选出绿色的苹果 List<Apple> weightApples_3 = chooseApples(appleList,(Apple apple) -> "green".equals(apple.getColor())); //终极超级酷炫拓展,将List类型抽象化: //类型抽象化后,你可以广泛的推广了,可以用在西瓜上,汽车上,Integer,String。。。。。。。。。。。。 //例如:筛选出集合中包含“e”的单词集合: List<String> stringList = Arrays.asList("one","two","three","four"); List<String> include_e = chooseSomeThind(stringList,(String str)-> str.contains("e")); //例如:筛选出集合中大于5的数字的集合: List<Integer> integersList = Arrays.asList(1,2,3,4,5,6,7,8,10); List<Integer> bigerThan_5 = chooseSomeThind(integersList,(Integer a)-> a>5); System.out.print("非常完美!"); } }
转自:https://blog.csdn.net/qq_37107280/article/details/77417500
内容总结
以上是互联网集市为您收集整理的JAVA8 in Action:行为参数化,匿名类及lambda表达式的初步认知实例整理全部内容,希望文章能够帮你解决JAVA8 in Action:行为参数化,匿名类及lambda表达式的初步认知实例整理所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。