JAVA8函数式编程

提示:

JAVA8由->表示分割,左半部分表示参数,右半部分表示实现体 
不要和JS的lambda表达式混淆 =>

先来一串简单的案例:

import java.util.Arrays;

/**
 * @Author: WuChao
 * @ClassName:PACKAGE_NAME
 * @Description:函数式编程, 所有的对象都会拒绝被修改
 * @date 2018/3/22
 */
public class Java8Method {
    public static void main(String[] args) {
        int[] arr = {1, 2, 3, 4, 5, 6};
        Arrays.stream(arr).map((x) -> x = x + 1).forEach(System.out::println);
        Arrays.stream(arr).forEach(System.out::println);
    }
}

函数式编程, 所有的对象都会拒绝被修改
也因为如此,函数式编程更加易于并行,我们完全不用担心线程安全的问题;不必要进行任何的同步操作;

再来一个例子

import java.util.Arrays;
import java.util.function.Function;

/**
 * @Author: WuChao
 * @ClassName:PACKAGE_NAME
 * @Description:函数式编程,类似于JS
 * @date 2018/3/22
 */
public class Java8Method {
    public static void main(String[] args) {
        Integer num = 8;
        Function<Integer, String> conv = (from) -> from *num+"超哥你不愧是最帅的!!!嘿嘿嘿!!!";
        System.out.println(conv.apply(8));
    }
}

上面代码存在着一个问题:num没有用final修饰,虽然编译照样通过,那是因为java8自动将lambda表达式中的变量视为final

import java.util.ArrayList;

/**
 * @Author: WuChao
 * @ClassName:PACKAGE_NAME
 * @Description:方法引用
 * @date 2018/3/22
 */
public class InstanceMethodRef {
    public static void main(String[] args) {
        ArrayList<User> users = new ArrayList<User>();
        for (int i = 0; i < 2; i++) {
            users.add(new User(i + "嘿嘿"));
        }
        users.stream().map(User::getName).forEach(System.out::println);

        users.stream().map((User)->User=new User("哈哈哈")).map(User::getName).forEach(System.out::println);

        users.stream().map(User::getName).forEach(System.out::println);
    }
}

控制台结果如下:

0嘿嘿
1嘿嘿
哈哈哈
哈哈哈
0嘿嘿
1嘿嘿
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值