ASList

一起来学Java8(七)——Stream(中)

我是研究僧i 提交于 2019-11-29 04:14:57
在 一起来学Java8(七)——Stream(上) 中我们了解到了Stream对象的常用方法以及用法。现在一起来深入了解下 Stream.collect() 方法的使用 collect基本用法 collect意思为收集,它是对Stream中的元素进行收集和归纳,返回一个新的集合对象。先来看一个简单例子: public class CollectTest { @Data @AllArgsConstructor static class Goods { private String goodsName; private int price; } public static void main(String[] args) { List<Goods> list = Arrays.asList( new Goods("iphoneX", 4000) , new Goods("mate30 pro", 5999) , new Goods("redmek20", 2999) ); List<String> nameList = list.stream() .map(Goods::getGoodsName) .collect(Collectors.toList()); } } 在这个例子中,通过map方法返回商品名称,然后把所有的商品名称放到了List对象中。 查看源码发现

测试下java函数式编程的几个接口

孤人 提交于 2019-11-29 03:17:58
//看着很简洁,就是有点难理解 public class Iterator_test { public static void main(String[] args) { List<String> list=new ArrayList<>(); list.add("343"); list.add("343434"); //使用Consumer接口 //函数式编程,消费者 list.forEach((String s)-> {System.out.println(s);}); list.forEach(s->System.out.println(s)); list.forEach(System.out::println); //使用Function接口 String s=Function_test("hello word",(s1)->s1+" wind"); String s2=Function_test("hello word",(s1)->{String a=s1+" hi";return a;}); System.out.println(s); System.out.println(s2); //测试supplier接口 List<Integer> mao=Supplier_test(5,()->(int)(Math.random()*10)); mao.forEach

一起来学Java8(七)——Stream(上)

强颜欢笑 提交于 2019-11-27 19:53:05
从Java8开始,新增了一个 java.util.stream 包,这个包下的类和接口用来处理集合中的元素,在这个包下面有一个Stream接口,我们主要使用这个接口来对集合进行操作。 创建Stream 首先来看下创建Stream有哪几种方式。 使用Stream自带的静态方法生成Stream对象,常见的静态方法有以下几个: Stream.of(T) Stream.of(T... values) Stream.generate(Supplier) Stream.iterate(T, UnaryOperator) Stream.empty() 现在来看下每个静态方法的作用 Stream.of(T) & Stream.of(T... values) Stream.of是由两个重载方法组成,一个传入单值,一个传入数组 String[] arr = {"hello", "world"}; Stream streamArr = Stream.of(arr); String str = "hello world"; Stream streamSingle = Stream.of(str); Stream.generate & Stream.iterate Stream.generate和Stream.iterate可以用来生成具有多个元素的Stream,如果不加控制会一直生成下去

JDK1.8 之Stream API总结

99封情书 提交于 2019-11-27 01:01:28
Stream是 Java 8新增加的类,用来补充集合类。 Stream代表数据流,流中的数据元素的数量可能是有限的,也 可能是无限 的。 Stream和其它集合类的区别在于:其它集合类主要关注与有限数量的数据的访问和有效管理(增删改),而Stream并 没有提供访问和管理元素的方式 ,而是通过声明数据源的方式,利用可计算的操作在数据源上执行,当然BaseStream.iterator() 和 BaseStream.spliterator()操作提供了遍历元素的方法。 Java Stream提供了提供了 串行和并行两种类型的流 ,保持一致的接口,提供函数式编程方式,以管道方式提供中间操作和最终执行操作,为Java语言的集合提供了现代语言提供的类似的高阶函数操作,简化和提高了Java集合的功能。 本文首先介绍Java Stream的特点,然后按照功能分类逐个介绍流的中间操作和终点操作,最后会介绍第三方为Java Stream做的扩展。 介绍 Stream接口还包含几个基本类型的子接口如IntStream, LongStream 和 DoubleStream。 关于流和其它集合具体的区别,可以参照下面的列表: 不存储数据。流是基于数据源的对象,它本身不存储数据元素,而是通过管道将数据源的元素传递给操作。 函数式编程。流的操作不会修改数据源,例如filter不会将数据源中的数据删除。

Arrays、Date、System、Math

隐身守侯 提交于 2019-11-26 17:36:49
Arrays toString(type[] arr):将数组转换为字符串展示 sort(type[] arr):将数组按照升序排列 copyOfRange(type[], start, end):复制数组的一部分或者整个数组 binarySearch(type[], start, end, char):在数组索引范围内用二分查找法查找字符串,返回字符下标,没有返回-1 fill(type[], char):将数组的值设为char equals(typeA[], typeB[]):判断两个数组是否相同 数组方法 检查数组是否包含某个值 String[] stringArray = { "a", "b", "c", "d", "e" }; boolean b = Arrays.asList(stringArray).contains("a"); // true System.out.println(b); 合并两个数组 用字符连接数组的值 数组移除元素 Date 时间转为字符串 /* * 时间转换为时间字符串 */ public static String date2string(Date time, String format) { SimpleDateFormat sdf = new SimpleDateFormat(format); return sdf.format(time

《提升能力,涨薪可待》-易理解的@SpringBootApplication注解源码解析

痞子三分冷 提交于 2019-11-26 09:23:52
欢迎一起学习 提升能力,涨薪可待 面试知识,工作可待 实战演练,拒绝996 如果此文对你有帮助、喜欢的话,那就点个赞呗! 前言 是不是感觉在工作上难于晋升了呢? 是不是感觉找工作面试是那么难呢? 是不是感觉自己每天都在996加班呢? 在工作上必须保持学习的能力,这样才能在工作得到更好的晋升,涨薪指日可待,欢迎一起学习【 提升能力,涨薪可待 】系列 在找工作面试应在学习的基础进行总结面试知识点,工作也指日可待,欢迎一起学习【 面试知识,工作可待 】系列 最后,理论知识到准备充足,是不是该躬行起来呢?欢迎一起学习【 实战演练,拒绝996 】系列 springApplication 一、 @SpringBootApplication 的作用是什么? ​ Q:springboot项目的启动类上,都会有个注解 @SpringBootApplication ,这个注解起到了什么作用? @SpringBootApplication public class MicroServiceApplication { public static void main(String[] args) { SpringApplication.run(MicroServiceApplication.class, args); } } ​ 我们进入 @SpringBootApplication 注解,发现它

ForkJoinPool源码解析(未写完,待补充)

╄→гoц情女王★ 提交于 2019-11-25 23:02:59
目录 ForkJoinPool介绍 什么是ForkJoinPool? 相对ThreadPoolExecutor有什么优缺点? 什么时候使用ForkJoinPool? 实例DEMO 涉及核心类或组件 ForkJoinPool ForkJoinTask ForkJoinWorkerThread WorkQueue 执行流程 执行流程 任务窃取 源码分析 添加任务 fork任务 join任务 补充部分 详情 1. ForkJoinPool介绍 1.1 什么是ForkJoinPool? ForkJoinPool是在JDK1.7新添加的一个JUC线程池工具类,它同样继承了AbstractExcutorService,如下图所示 在未开始介绍该类之前,我们先从字面意思猜想一下该类的左右:fork:分叉;join:参加、联合、连接;pool:小池;翻译:参加分叉的小池,或者连接分叉的小池。恩,,,这个翻译坑爹呀!!!! 不不不,不是这样的,咱们可以适当的加点猜想嘛,比如说在JUC中,一定与并发有关系,那么可否这么翻译呢? “一个将任务拆分并结果合并的线程池”。 1.2 相对ThreadPoolExecutor有什么优缺点? 从上文我们已经知道ForkJoinPool是一个线程池,那么他与咱们常用的 ThreadPoolExecutor 线程池有什么区别呢? 首先看下两个线程池的结构图:

设计模式之责任链模式

谁说胖子不能爱 提交于 2019-11-25 21:26:25
简介 责任链模式(Chain of Responsibility Pattern)属于设计模式的行为型模式。责任链模式与多米诺骨牌有点类似,请求在链中从前向后传递,一直到最后一个。当然责任链的处理可以复杂的多。 定义 责任链模式: 使多个对象都有机会处理请求,从而避免请求的发送者与请求处理者耦合在一起。将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。 可以看到在标准的责任链中,请求是只由一个对象来处理的。不过我们不用拘泥于这个定义,责任链的主要目的是将请求处理的各个对象解耦出来,至于在链中传递时有多少个对象处理了请求,其实并不重要。 角色 从定义中可以看出,责任链模式包含的角色有有发送者,请求处理接口,具体请求处理实现及将实现连接起来的链。 发送者:产生请求对象,发起对链的调用 请求处理接口: 定义处理的标准接口,所有的具体请求处理实现都需要实现这个接口,链只需要依赖接口即可 具体请求处理实现:对请求进行处理,并决定是否继续向后传递请求 链:将所有的请求组装到一起,变成一个有序的处理链条 责任链模式可简单可复杂,一般来说接口和实现是必须的,链对象可以简单变为一个 List ,处理顺序也可以简化为 for 循环与发送者耦合到一起。如果处理比较复杂,像 Servlet Filter,网络请求库的Handler等框架则会有一个链对象,而且链中的下一级调用与否是由