博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Java8 方法引用的使用
阅读量:6378 次
发布时间:2019-06-23

本文共 5528 字,大约阅读时间需要 18 分钟。

hot3.png

####一、方法引用分类

1.构造函数2.静态方法3.实例方法(类型)4.实例方法(对象)

####二、方法引用-构造函数 ClassName::new,示例:

/** * @author Kevin * @date 2017-01-24 */public class ConstructorTest {    public static void main(String[] args) {        Function
function = String::new; System.out.println(function.apply("SpaceX")); }}

####三、方法引用-静态方法 ClassName::staticMethodName,示例:

/** * @author Kevin * @date 2017-01-24 */public class StaticMethodTest {    public static void main(String[] args) {        Function
function = String::valueOf; System.out.println(function.apply(1001)); }}

####三、方法引用-实例方法(类型) ClassName::instanceMethodName,示例:

/** * @author Kevin * @date 2017-01-24 */public class ClassNameInstanceMethodTest {    public static void main(String[] args) {        Function
function = String::length; System.out.println(function.apply("Google")); }}

####四、方法引用-实例方法(对象) object::instanceMethodName,示例:

/** * 公司 * * @author Kevin * @date 2017-01-24 */public class Company {    /**     * 编码     */    private String code;    /**     * 公司名称     */    private String name;    public Company() {    }    public Company(String name, String code) {        this.name = name;        this.code = code;    }    public static int compareByCode(Company a, Company b) {        return a.getCode().compareTo(b.getCode());    }    @Override    public String toString() {        return "Company{" +                "code='" + code + '\'' +                ", name='" + name + '\'' +                '}';    }    /**     * 生产     *     * @author Kevin     */    String produce(String productName) {        return getName() + " produces " + productName;    }    public String getCode() {        return code;    }    public void setCode(String code) {        this.code = code;    }    public String getName() {        return name;    }    public void setName(String name) {        this.name = name;    }}/** * @author Kevin * @date 2017-01-24 */public class ObjectInstanceMethodTest {    public static void main(String[] args) {        Company company = new Company();        company.setName("Apple");        Function
converter = company::produce; System.out.println(converter.apply("iPhone 7")); }}

五、方法引用的综合使用

/** * Java8 方法引用 * * @author Kevin * @date 2017-01-24 */public class MethodReferencesTest {    public static void main(String[] args) {        List
companyList = new ArrayList<>(); companyList.add(new Company("Google", "1002")); companyList.add(new Company("SpaceX", "1001")); companyList.add(new Company("Apple", "1003")); System.out.println("------companyList------"); companyList.forEach(System.out::println); Company[] listAsArray = companyList.toArray(new Company[companyList.size()]); // 不使用方法引用 Arrays.sort(listAsArray, new Comparator
() { @Override public int compare(Company a, Company b) { return a.getCode().compareTo(b.getCode()); } }); // 使用lambada表达式 Arrays.sort(listAsArray, (Company a, Company b) -> { return a.getCode().compareTo(b.getCode()); } ); // 方法引用(静态方法) Arrays.sort(listAsArray, Company::compareByCode); System.out.println("------listAsArray------"); for (int i = 0; i < listAsArray.length; i++) { System.out.println(listAsArray[i]); } class ComparisonProvider { public int compareByName(Company a, Company b) { return a.getName().compareTo(b.getName()); } } ComparisonProvider comparisonProvider = new ComparisonProvider(); // 方法引用(实例方法) Arrays.sort(listAsArray, comparisonProvider::compareByName); // 使用lambada表达式构造函数 Set
companySetLambda = transferElements(companyList, () -> { return new HashSet<>(); }); System.out.println("------companySetLambda------"); companySetLambda.forEach(System.out::println); // 使用new运算符构造函数 Set
companySet = transferElements( companyList, HashSet::new); System.out.println("------companySet------"); companySet.forEach(System.out::println); } /** * 将集合中的元素复制到另一个集合 * * @author Kevin */ public static
, DEST extends Collection
> DEST transferElements( SOURCE sourceCollection, Supplier
collectionFactory) { DEST result = collectionFactory.get(); for (T t : sourceCollection) { result.add(t); } return result; }}/** * 公司 * * @author Kevin * @date 2017-01-24 */public class Company { /** * 编码 */ private String code; /** * 公司名称 */ private String name; public Company() { } public Company(String name, String code) { this.name = name; this.code = code; } public static int compareByCode(Company a, Company b) { return a.getCode().compareTo(b.getCode()); } @Override public String toString() { return "Company{" + "code='" + code + '\'' + ", name='" + name + '\'' + '}'; } /** * 生产 * * @author Kevin */ String produce(String productName) { return getName() + " produces " + productName; } public String getCode() { return code; } public void setCode(String code) { this.code = code; } public String getName() { return name; } public void setName(String name) { this.name = name; }}

六、参考文章

1.

转载于:https://my.oschina.net/zhaokaiju/blog/830157

你可能感兴趣的文章
10个Python 统计报表/图表图形类库
查看>>
关于 xargs 参数被截断,tar 文件被覆盖的问题
查看>>
CentOS 6.3 上安装 Oracle 11g R2(转)
查看>>
js实现滚动新闻效果
查看>>
Nginx出现could not build the server_names_hash 解决办法
查看>>
Netbeans8在web项目中创建servlet
查看>>
Xmananger连接CentOS6.4
查看>>
ESXi upgrade 6.0 To 6.7
查看>>
高可用haproxy调度后端服务器实现动静分离集群架构
查看>>
一款分屏管理软件和一个虚拟桌面软件
查看>>
关于医院管理中书写的病志已提交删除问题
查看>>
SpringMVC处理器拦截器介绍及应用
查看>>
我的友情链接
查看>>
Python给文件上锁
查看>>
python操作Excel读写--使用xlrd
查看>>
也来开个博客,分享一下我掉过的坑!
查看>>
spark-submit
查看>>
Android Intent 序列化和反序列化
查看>>
八 手游开发神器 cocos2d-x editor 之动画和帧动画
查看>>
WordPress主题结构分析和图文解释
查看>>