Lucent's Blog

Lucent's Blog

当时明月在 曾照彩云归


人生不相见,动如参与商。


Stream API

  1. java8如何排序Map

    java8如何排序Map

    3 min read
    java · Stream API

    在Java中,有多种方法可以对Map进行排序,但是我们将重点介绍Java 8 Stream,这是实现目标的一种非常优雅的方法。 学习一下HashMap的merge()函数 在学习Map排序之前,有必要讲一下HashMap的merge()函数,该函数应用场景就是当Key重复的时候,如何处理Map的元素值。这个函数有三个参数: * 参数一:向map里面put的键 * 参数二:向map里面put的值 * 参数三:如果键发生重复,如何处理值。可以是一个函数,也可以写成lambda表达式。 String k = "key"; HashMap<String, Integer> map

  2. StreamAPI终端操作

    StreamAPI终端操作

    5 min read
    java · Stream API

    Java Stream管道流是用于简化集合类元素处理的java API。 在使用的过程中分为三个阶段: * 将集合、数组、或行文本文件转换为java Stream管道流 * 管道流式数据处理操作,处理管道中的每一个元素。上一个管道中的输出元素作为下一个管道的输入元素。 * 管道流结果处理操作 回顾一下之前写过的一个例子: List<String> nameStrs = Arrays.asList("Monkey", "Lion", "Giraffe","Lemur"); List<

  3. Stream查找与匹配元素

    Stream查找与匹配元素

    3 min read
    java · Stream API

    在对数组或者集合类进行操作的时候,经常会遇到这样的需求,比如: * 是否包含某一个“匹配规则”的元素 * 是否所有的元素都符合某一个“匹配规则” * 是否所有元素都不符合某一个“匹配规则” * 查找第一个符合“匹配规则”的元素 * 查找任意一个符合“匹配规则”的元素 这些需求如果用for循环去写的话,还是比较麻烦的,需要使用到for循环和break。下面使用Stream来完成这些操作。 何用Stream API来实现“查找与匹配” Employee员工类: @Data @AllArgsConstructor public class Employee { private Integer id; private Integer

  4. 函数式接口Comparator

    函数式接口Comparator

    3 min read
    java · Stream API

    函数式接口是什么? 所谓的函数式接口,实际上就是接口里面只能有一个抽象方法的接口。Comparator接口就是一个典型的函数式接口,它只有一个抽象方法compare。 有人会说equales方法也没有方法体,也是抽象方法。但是函数式接口的特点中有一条是:允许出现java.lang.Object中的public方法,所以equales方法可以忽略掉,Comparator仍然是函数式接口。 函数式接口的特点 * 接口有且仅有一个抽象方法,如上图的抽象方法compare * 允许出现java.lang.Object中的public方法,如上图的方法equals。 * 允许定义静态非抽象方法 * 允许定义默认defalut非抽象方法(default方法也是java8才有的) * FunctionInterface注解不是必须的,如果一个接口符合"函数式接口"定义,那么加不加该注解都没有影响。 甚至可以说:函数式接口是专门为lambda表达式准备的,lambda表达式是只实现接口中唯一的抽象方法的匿名实现类。 default关键字

  5. java像使用SQL一样排序集合

    java像使用SQL一样排序集合

    3 min read
    java · Stream API

    字符串List排序 cities是一个字符串数组。注意london的首字母是小写的。 List<String> cities = Arrays.asList( "Milan", "london", "San Francisco", "Tokyo", "New Delhi" ); System.out.println(cities); //[Milan, london, San

  6. Stream的状态与并行操作

    Stream的状态与并行操作

    4 min read
    java · Stream API

    有状态与无状态 在编程中,经常会接触到“有状态”,“无状态”,绝大部分的人都比较蒙。而且在不同的场景下,“状态”这个词的含义似乎有所不同。 * 状态通常代表公用数据,有状态就是有“公用数据” * 因为有公用的数据,状态通常需要额外的存储。 * 状态通常被多人、多用户、多线程、多次操作,这就涉及到状态的管理及变更操作。 举个例子: * web开发session就是一种状态,访问者的多次请求关联同一个session,这个session需要存储到内存或者redis。多次请求使用同一个公用的session,这个session就是状态数据。 * vue的vuex的store就是一种状态,首先它是多组件公用的,其次是不同的组件都可以修改它,最后它需要独立于组件单独存储。所以store就是一种状态。 * filter与map操作,不需要管道流的前面后面元素相关,所以不需要额外的记录元素之间的关系。输入一个元素,

  7. Stream管道流的map操作

    Stream管道流的map操作

    2 min read
    java · Stream API

    Stream管道流map的基础用法 将集合中的每一个字符串,全部转换成大写: List<String> alpha = Arrays.asList("Monkey", "Lion", "Giraffe", "Lemur"); List<String> collect = alpha.stream().map(String::toUpperCase).collect(Collectors.

  8. Stream的filter与谓语逻辑

    Stream的filter与谓语逻辑

    3 min read
    java · Stream API

    什么是谓语逻辑 如下代码中WHERE 和 AND 限定了主语employee是什么,那么WHERE和AND语句所代表的逻辑就是谓语逻辑。 SELECT * FROM employee WHERE age > 70 AND gender = 'M' lambda表达式表达的是一个匿名接口函数的实现,那具体到Stream.filter()中,它表达的是一个Predicate接口,在英语中这个单词的意思是:谓语。 创建一个实体类Employee 下面的代码使用了lombok的注解Data、AllArgsConstructor来代替getter,setter和全参构造方法 @Data @AllArgsConstructor public class Employee

  9. Stream API代替for循环

    Stream API代替for循环

    3 min read
    java · Stream API

    什么是Stream API Java Stream函数式编程接口最初是在Java 8中引入的,并且与lambda一起成为Java开发的里程碑式的功能特性,它极大的方便了开放人员处理集合类数据的效率。Java Stream就是一个数据流经的管道,并且在管道中对数据进行操作,然后流入下一个管道。有学过linux 管道应该会很容易理解。在没有Java Stram之前,对于集合类的操作,更多的是通过for循环。而Java Stream相对于for 循环更加简洁、易用、快捷。 管道的功能包括:Filter(过滤)、Map(映射)、sort(排序)等,集合数据通过Java Stream管道处理之后,转化为另一组集合或数据输出。 Stream