设为首页 加入收藏

TOP

JAVA函数式编程(六)
2023-08-06 07:49:34 】 浏览:90
Tags:JAVA
read().getName(),obj); }

打印结果

[main]:7 
[ForkJoinPool.commonPool-worker-2]:1 
[ForkJoinPool.commonPool-worker-2]:4 
[ForkJoinPool.commonPool-worker-9]:8 
[ForkJoinPool.commonPool-worker-6]:3 
[ForkJoinPool.commonPool-worker-13]:6 
[ForkJoinPool.commonPool-worker-15]:5 
[ForkJoinPool.commonPool-worker-4]:9 
[ForkJoinPool.commonPool-worker-11]:2 
[main]:1

这个默认创建系统设置的线程数(NUMBER_OF_PROCESSORS)

理解Collect

    /**collect的使用案例
     * @param integers
     * @return
     */
    public static List<Integer> collect(Integer... integers){
        List<Integer> collect = Stream.of(integers).collect(Collectors.toList());
        List<Integer> collect2 = Stream.of(integers).collect(LinkedList::new,LinkedList::add,LinkedList::addAll);
        return collect;
    }

理解flatMap

一般是处理一些降维的需求,例如List<List<Klass>> -- > List<Klass>

    static class Klass {
        private String name;

        public Klass(String name) {
            this.name = name;
        }
        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        @Override
        public String toString() {
            return "Klass{" +
                    "name='" + name + '\'' +
                    '}';
        }
    }

    static class KlassGroup {
        private List<Klass> group = new ArrayList<>();

        public KlassGroup(Klass... klass) {
            group.addAll(Arrays.asList(klass));
        }

        public List<Klass> getGroup() {
            return group;
        }

    }
    // 现在要做的一件事是如果有多个List<Klass>想合并成一个List<Klass>

    /**
     * 关于flatMap的使用
     * @param klassLoist
     * @return
     */
    public static List<Klass> mergeKlass(List<List<Klass>> klassLoist){
        return klassLoist.stream().flatMap(Collection::stream).collect(Collectors.toList());
    }

函数式编程的局限性

尽管函数式编程在很多场景下提供了很多优势,但它也有一些局限性:

  1. 学习曲线:对于习惯了命令式编程范式的开发者来说,切换到函数式编程需要适应新的思维方式和编程习惯。函数式编程的概念和特性可能对初学者来说较为陌生,需要一定的学习和实践才能熟练掌握。

  2. 性能问题:虽然函数式编程提倡不可变数据和纯函数,但有时候为了实现函数式编程的特性,可能需要引入额外的对象拷贝或数据结构转换,导致一定的性能损失。对于一些性能敏感的场景,可能需要权衡是否使用函数式编程。

  3. 可读性问题:虽然函数式编程鼓励使用更简洁、声明式的代码,但对于复杂的业务逻辑,过度使用函数式编程可能会导致代码的可读性下降,增加理解的难度。

  4. 嵌套问题:函数式编程中的函数组合、嵌套等特性,可能导致代码的层级嵌套过深,降低代码的可读性和可维护性。

  5. 现有项目兼容性:对于现有的项目,特别是老旧项目,可能由于历史原因和架构设计,不太容易完全引入函数式编程的特性,可能需要进行较大的重构。

  6. 并发处理复杂性:函数式编程鼓励不可变数据和纯函数,这在并发处理时可以避免一些线程安全问题。但对于复杂的并发场景,函数式编程的特性可能会增加代码的复杂性,需要谨慎处理。

站在巨人的肩膀上

  1. 函数式编程思维(Functional Thinking)(书籍) - Neal Ford 这本书向读者介绍了函数式编程的思维方式和概念,它从函数式编程的基础开始,逐步深入,涵盖了函数式编程在 Java、java script、Scala 等编程语言中的应用。
  2. Java 8 in Action(书籍) - Raoul-Gabriel Urma, Mario Fusco, Alan Mycroft 这本书全面讲解了 Java 8 的新特性,包括函数式编程、Lambda 表达式、Stream API 等。它提供了大量实例和案例,帮助读者快速上手函数式编程在 Java 中的应用。
  3. Functional Programming Principles in Scala(在线课程) - Martin Odersky 这是由 Scala 语言的创始人 Martin Odersky 主讲的在线课程。课程涵盖函数式编程的基本概念和原则,并通过 Scala 语言进行实践。
  4. Functional Programming for the Object-Oriented Programmer(在线文章) - Brian Marick 这篇文章向面向对象编程开发者介绍函数式编程的概念和思维方式,帮助他们理解函数式编程并适应新的编程范式。
  5. Functional Programming Concepts in Python(在线教程) - Real Python 这个教程将 Python 中的函数式编程概念进行了详细介绍,涵盖了函数、Lambda 函数、高阶函数、Generator 等内容。
首页 上一页 3 4 5 6 下一页 尾页 6/6/6
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇@ControllerAdvice 注解使用及原.. 下一篇《深入理解Java虚拟机》读书笔记..

最新文章

热门文章

Hot 文章

Python

C 语言

C++基础

大数据基础

linux编程基础

C/C++面试题目