zoukankan      html  css  js  c++  java
  • 函数式编程

    首先确认什么事函数式编程,也就是只需要关心需要什么,不要关注如何实现。函数式编程更多的是思想上

    举个例子,找一个最小值:

            int[] nums = {1,2,3,4,5,6};
            int min = Integer.MAX_VALUE;
    
            System.out.println("before :" + min);
    
            // 命令式编程
            for(int i: nums){
                if(i < min){
                    min = i;
                }
            }
            System.out.println("after :" + min);
    
            // 函数式编程
            int min2 = IntStream.of(nums).min().getAsInt();
            System.out.println("min2 :" + min2);
    
            // 如果需要开启多线程
            int min3 = IntStream.of(nums).parallel().min().getAsInt();
            System.out.println("min3 " + min3);
        }
    before :2147483647
    after :1
    min2 :1
    min3 1

    lambda匿名函数,可以帮助简化代码,是jdk8加入的强大的功能,解决了长期java被人诟病代码重复的问题,定义一个方法接口,里面一般只有一个方法,因此我们在定义接口是,可以尽量接口单一,可以通过继承方式来实现多接口,lambda表达式帮助我们返回一个接口的实例,可以直接使用进行调用,同时jdk8加入新特性,也就是可以定义默认方法,一般接口的所有方法必须全部实现,使用默认方法可以无需实现,这样如果需要修改接口的话,直接添加默认方法,其实现类照样可以正常运行

    @FunctionalInterface
    interface DoubleNum{
        int doubleNum(int i);
    
        default int sum(int x, int y){
            x = this.doubleNum(x);
            return x + y;
        }
    }
    
    public class Lambda {
        public static void main(String[] args) {
            // lambda
            DoubleNum d1 = (i) -> i *2;
    
            // 常用写法
            DoubleNum d2 =  i -> i * 3;
    
            DoubleNum d3 = i -> {
                return i*2;
            };
            System.out.println(d1.doubleNum(2));    // 4
            System.out.println(d1.sum(2, 2));   // 6   
            System.out.println(d2.doubleNum(3));    // 9
            System.out.println(d2.sum(3, 3));   // 12
            System.out.println(d3.doubleNum(4));    // 8
            System.out.println(d3.sum(4, 4));   // 12
        }
    }
  • 相关阅读:
    浅谈TCP三次握手和四次挥手
    浅谈网络七层协议
    websocket实例
    浅谈websocket
    python的垃圾回收机制
    解释型语言和编译型语言的区别
    装饰器修复技术@wraps
    Django基础知识点
    项目再Windows上没有问题,但是在Linux上运行报错OSError: [Errno 8] Exec format error:
    在Centos 7 系统上部署flask 项目 pipenv+nginx+gunicorn
  • 原文地址:https://www.cnblogs.com/yangshixiong/p/12898707.html
Copyright © 2011-2022 走看看