JAVA8 Function及Stream编程
来源:互联网 发布:c语言 long类型 编辑:程序博客网 时间:2024/04/29 03:53
JAVA8引入函数式编程后,增加了灵活性,原来需要通过ScriptEngine调用脚本语言,现在通过Function接口即可。
方便了编码,代码也比较简洁些。
1. Function
函数式编程的格式如下集中方式:
a. 标准方式
(Type1 param1, Type2 param2, ..., TypeN paramN) -> {
statment1;
statment2;
//.............
return statmentM;
}
b.省略类型
(param1,param2, ..., paramN) -> {
statment1;
statment2;
//.............
return statmentM;
}
c.参数为1个时,可用省略参数小括号
param1 -> {
statment1;
statment2;
//.............
return statmentM;
}
d. 语句只有一条时,可省略语句大括号
param1 -> statment
Function典型的应用场景为:A. 1个只有1个方法的接口,避免写匿名类; B. 接受Fuction接口为参数的方法
例子1:正常情况下Thread构造函数中接受实现了Runnable接口的匿名类:
new Thread(new Runnable(){
@Override
public void run() {
System.out.println("hello new thread");
}
});
new Thread(()->System.out.println("hello new thread")).run();
这里Runnable已经加了@FunctionalInterface标注,是不是简洁了很多,这种写法就是对于初学者看起来可能比较莫名。是不是简洁了很多,这种写法就是对于初学者看起来可能比较莫名。
例子2:自己实现一个@FunctionalInterface接口
@FunctionalInterface
public interface BaseAdapterInf {
public abstract void work(String name);
}
TestFunction类实现1个调用接口的方法
public void invokeRule3(BaseAdapterInf adapter, String name){
adapter.work(name);
}
具体调用:
TestFunction testf=new TestFunction();
testf.invokeRule3((name)->System.out.println(name+ " welcome!"),"lisi");
例子3: 实现1个调用Function方法的类
import java.util.function.Function;
TestFunction类实现方法:
public void invokeRule2(String input, Function<String, Integer> function){
int len= function.apply(input); //需要有返回值
System.out.println(len);
//return result;
}
}
具体调用:
TestFunction testf=new TestFunction();
testf.invokeRule2("hello world", (input)->{
return input.length();
});
}
2. 方法引用
方法引用的标准形式是:类名::方法名。(注意:只需要写方法名,不需要写括号)
类型 示例
引用静态方法 ContainingClass::staticMethodName
引用某个对象的实例方法 containingObject::instanceMethodName
引用某个类型的任意对象的实例方法 ContainingType::methodName
引用构造方法 ClassName::new
静态方法引用例子:
String::valueOf 等价于lambda表达式 (s) -> String.valueOf(s)
Math::pow 等价于lambda表达式 (x, y) -> Math.pow(x, y);
###本文中为原创,引用者请注明出处
阅读全文
0 0
- JAVA8 Function及Stream编程
- Java8集合及Stream操作
- 【转】JAVA8-Stream弥补函数式编程
- 【java】【java8】Lambda、Stream、Function、Consumer、Predicate、Supplier
- java8中的stream,function包的常用方法总结
- Java8 Stream
- java8 stream
- Java8 Stream
- Java8 Stream
- Java8:Stream
- java8-stream
- java8 stream
- Java8 Stream
- Java8 Stream
- Java8 stream
- java8 stream
- java8-stream
- Java8 Stream
- Rust: Descending Order
- ForkJoin框架示例(二)
- 线程与进程的区别
- UVa11752
- Qt5中生成和使用静态库
- JAVA8 Function及Stream编程
- CMU15-440-P0:Implementing a key-value messaging system
- BZOJ 4937: [Ceoi2016]popeala
- 无人驾驶汽车系统入门(三)——无损卡尔曼滤波,目标追踪,C++
- Deep Learning学习 之 CNN代码解析(MATLAB)
- Rhyme/ hibernate.cfg.xml hbm2ddl.auto 属性 create、create-drop、validation、update选项解释
- 四大组件--Activity(Fragment)
- 面试题精选(一)
- 《java与模式》-6 代码中应该遵守的原则