lambda表达式-java中的应用
2017-10-21 14:15
441 查看
转载来源
lambda表达式的参数通常会很短,尽量将所有代码写在一行,用于提高可读性;
Stream中的map(),filter(),collection(),get(),distinct()方法等,结合java.util.function.Predicate,进行函数式编程,做过滤:
用IntSummaryStatistics类计算最大值、最小值和平均值和总和和元素数量
Lambda表达式的好处
:在java8之前,如果想将行为传入函数,只能使用匿名内部类,而java引入的lambda表达式取代了匿名内部类,允许函数式风格编写代码,示例:java8之前的匿名内部类 new Thread(new Runnable(){ @Override public void run() { System.out.println("doSomething before1.8"); } }).start(); //java8之后:此例lambda表达式参数为空 new Thread(()-> System.out.println("doSomething 1.8")).start();
Lambda表达式的基本用法
(paramX,paramY...)->expression(X,Y...);
lambda表达式的参数通常会很短,尽量将所有代码写在一行,用于提高可读性;
示例
遍历集合类:List<String> list= Arrays.asList("du","gen","kui"); list.forEach(a-> System.out.println(a)); output:du gen kui
Stream中的map(),filter(),collection(),get(),distinct()方法等,结合java.util.function.Predicate,进行函数式编程,做过滤:
//filter用于过滤 List languages=Arrays.asList("Java","C+++","python","R","JPP"); System.out.println("language startWith J"); // filter(languages,(str)->str.toString().startsWith("J")); languages.stream().filter(n->n.toString().startsWith("J")).forEach(m-> System.out.println(m)); //Predicate中and()和or()的使用 Predicate<String> startwithJ=n->n.startsWith("J");//用lambda表达式赋值“逻辑" Predicate<String> lengthFour=n->n.length()==4;//<String>是n的类型 //输出J开始而且长度为4的元素:and System.out.println("language start with J AND length is 4"); languages.stream().filter(startwithJ.and(lengthFour)).forEach(n-> System.out.println(n)); //输出长度为4或者以J开头的 System.out.println("language start with J OR length is 4"); languages.stream().filter(startwithJ.or(lengthFour)).forEach(n-> System.out.println(n)); //map()用于映射,但是不会改变原元素值 List names=Arrays.asList("genkui","genliang","genlong"); names.stream().map(x->"du"+x).forEach(y->System.out.print(y+"\t")); names.forEach(z-> System.out.println(z)); //TODO reduce方法的使用 List<Integer> income=Arrays.asList(2800,5000,12800);//订单价格 double SumBrokerage=income.stream().map((x)->x*0.1).reduce((sum,x)->sum+x).get();//订单佣金总和 System.out.println(SumBrokerage); List<String> strList = Arrays.asList("du","dug","dugenkui","d"); List<String> filtered = strList.stream().filter(x -> x.length()> 2).collect(Collectors.toList()); // List<String> filtered = strList.stream().filter(x -> x.length()> 2).distinct().collect< 4000 /span>(Collectors.toList()); // System.out.printf("Original List : %s, filtered list : %s %n", strList, filtered);
用IntSummaryStatistics类计算最大值、最小值和平均值和总和和元素数量
List<Integer> list=Arrays.asList(1,2,3,4); IntSummaryStatistics intSummaryStatistics=list.stream().mapToInt(x->x).summaryStatistics(); System.out.println("最大值、最小值、平均值和总和以及元素数量分别是分别是:"+ intSummaryStatistics.getMax()+":"+intSummaryStatistics.getMin()+":"+intSummaryStatistics.getAverage() +":"+intSummaryStatistics.getSum()+":"+intSummaryStatistics.getCount());
[相关补充]
/** * map相关: * 1.key应该是唯一的:key和value是 n:1 的关系; * 2.同一个key使用put(key,valueX)时,后者会更新前者的value值; * 3.key.kesSet()返回key值得集合; * 4.同上 */ Map<String,String> map=new HashMap<>(); map.put("du1","genkui"); map.put("du2","genliang"); map.put("du3","genlong"); System.out.println(map.keySet()+map.values());
相关文章推荐
- Java lambda表达式的应用
- java的lambda表达式、匿名类,Predicate接口,Consumer接口的应用
- java8 lambda表达式在集合中的应用
- (持续更新)Java8.0 Lambda表达式实际应用案例
- Java Lambda 表达式的常见应用场景
- java 正则表达式的应用:读取文件,获取其中的电话号码
- java 正则表达式的应用(取出sql中 的占位符)
- 在Java中使用Lambda表达式的技巧
- 探索Java语言与JVM中的Lambda表达式
- Java lambda 表达式的基础知识
- 详解Java8特性之Lambda表达式
- 正则表达式学习与应用及JAVA中相关函数
- Java Lambda 表达式 对 Map 对象排序
- Java 8 Lambda表达式
- Java8新特性之Lambda表达式(2)
- Java8 Lambda表达式之比较器
- java lambda 表达式
- Java8之Lambda表达式
- 数据结构之应用 "栈(Stack)" 实现: 解析算术表达式及计算求值 (C#/Java)
- java8新特性--lambda表达式