Java8-Lambda
文章平均质量分 89
OkidoGreen
这个作者很懒,什么都没留下…
展开
-
【Java 基础】Collectors 使用小结
stream()转载 2023-06-28 17:29:06 · 2689 阅读 · 0 评论 -
parallelStream、CompletableFuture 使用默认ForkJoinPool.commonPool()线程池的问题
parallelStream和CompletableFuture 默认使用的都是ForkJoinPool.commonPool()默认线程池;基于服务器内核的限制,如果你是八核,每次线程只能起八个,不能自定义线程池;适用于对list密集计算操作充分利用CPU资源,如果需要调用远端服务不建议使用参考:https://blog.csdn.net/z69183787/article/details/107026179https://blog.csdn.net/z69183787/a...原创 2020-06-29 18:50:52 · 5458 阅读 · 0 评论 -
记一次生产问题--CompletableFuture默认线程池
在jdk7中,我们使用线程池可能会使用ExecutorService,默认有四种方式Executors.newSingleeThreadPool()Executors.newFixedThreadPool()Executors.newCacheThreadPool()Executors.newScheduledThreadPool()在jdk8中,CompletableFuture腾空出世,它简化了异步任务的写法,提供了很多异步任务的计算方式。言归正传,现在生产上面出现的问题是,在转载 2020-06-29 18:48:07 · 6308 阅读 · 2 评论 -
并行流parallel,CompletableFuture与Executors线程池的使用与区别
list并行操作在项目开发可以极大提高代码效率与性能,java8对其进行了很好的封装,简单使用研究一下:1. 先自己创建一个list:// list在实际使用中要注意线程安全,Collections.synchronizedList写操作性能高,CopyOnWriteArrayList读操作性能较好List<String> list = Arrays.asList(new String[10000]);2. parallel并行流使用:list.stream().paral转载 2020-06-29 18:45:52 · 4064 阅读 · 0 评论 -
Java8 parallelStream —— 替换默认的共享线程池ForkJoinPool.commonPool()
Java 8 并行流(parallel stream)采用共享线程池,对性能造成了严重影响。可以包装流来调用自己的线程池解决性能问题。问题Java 8 的并行流可以让我们相对轻松地执行并行任务。myList.parallelStream.map(obj -> longRunningOperation())但是这样存在一个严重的问题:在 JVM 的后台,使用通用的 fork/join 池来完成上述功能,该池是所有并行流共享的。默认情况,fork/join 池会为每个处理器分配一个线程转载 2020-06-29 18:10:23 · 8288 阅读 · 0 评论 -
Stream的collect方法是怎么保证线程安全的
写这篇文章是因为前段时间有个同事用parallelStream处理集合的时候发现数据丢了。因为是线上问题所以和他一起看了一下。出问题的代码大致如下:List<Foobar> result = new ArrayList<>();fooList.parallelStream().forEach(bar -> { Foobar foobar = new...转载 2020-04-09 15:14:09 · 3977 阅读 · 1 评论 -
关于parallelStream并发安全的思考
今天工作中遇到了关于使用parallelStream导致的并发安全问题,使用三个ArrayList容器进行数据交集等处理时,由于数据较多,希望通过并行流提高处理效率,但没考虑过线程安全问题。解决的方法非常简单,正确的使用map、collect、reduce,或者使用线程安全容器、加锁即可。但其实是使用时没有仔细了解相关的使用知识导致应用出现问题。搜了下确实有很多相关资料,需要仔细了解相关A...转载 2020-04-09 15:08:55 · 3017 阅读 · 0 评论 -
java8 使用parallelStream线程安全地收集数据
Table of ContentsSolution 1: 不用parallel Solution 2: 使用collect方法以下我们常用的数据结构,都是线程不安全的。ArrayList, LinkedList HashMap, LinkedHashMap, TreeMap HashSet, LinkedHashSet, TreeSet StringBuilderparalle...转载 2020-04-09 11:56:32 · 3207 阅读 · 0 评论 -
java8 快速实现List转map 、分组、过滤等操作
利用java8新特性,可以用简洁高效的代码来实现一些数据处理。定义1个Apple对象:public class Apple { private Integer id; private String name; private BigDecimal money; private Integer num; public Apple(Integer id...转载 2020-03-25 16:54:47 · 1445 阅读 · 0 评论 -
Java8:使用Lambda表达式增强版Comparator排序
package com.server.model;/** * Created by jstarseven on 2016/3/21. */public class Human { private String name; private int age; @Override public String toString() { ret...转载 2019-11-20 10:48:18 · 753 阅读 · 0 评论 -
【JAVA8】map操作 & 删除元素的简单方法
https://blog.csdn.net/cheidou123/article/details/86630168https://blog.csdn.net/jackyrongvip/article/details/89397513JAVA8-删除元素传统的,在JAVA中得MAP中删除元素,可以这样,假设有个MAP:Map<Integer, String> map...转载 2019-07-15 12:03:32 · 8429 阅读 · 0 评论 -
Benefit of using forEachOrdered with Parallel streams
https://stackoverflow.com/questions/47336825/benefit-of-using-foreachordered-with-parallel-streamsNote that you may lose the benefits of parallelism if you use operations like forEachOrdered wit...转载 2019-07-02 19:01:09 · 652 阅读 · 0 评论 -
Java 8特性探究(1):通往lambda之路_语法篇
现在开始要灌输一些概念性的东西了,这能帮助你理解lambda更加透彻一点,如果你之前听说过,也可当是温习,所谓温故而知新......在开始之前,可以同步下载jdk 8 和 IDE,IDE根据个人习惯了,不过eclipse官方版本还没出来,所以目前看的话,netbean7.4是首选的,毕竟前段子刚刚出的正式版本,以下是他们的下载地址。jdk 8:https://jdk8.java.转载 2015-11-18 15:05:28 · 1383 阅读 · 0 评论 -
Java8 新特性之流式数据处理
https://www.cnblogs.com/shenlanzhizun/p/6027042.html 一. 流式处理简介在我接触到java8流式处理的时候,我的第一感觉是流式处理让集合操作变得简洁了许多,通常我们需要多行代码才能完成的操作,借助于流式处理可以在一行中实现。比如我们希望对一个包含整数的集合中筛选出所有的偶数,并将其封装成为一个新的List返回,那么在java8之前,我...转载 2018-08-09 18:46:53 · 720 阅读 · 0 评论 -
Java 8 peek() 方法的一些疑惑
Stream.of("one", "two", "three", "four").peek(e -> System.out.println(e));这样不会有任何的输出;Stream.of("one", "two", "three", "four").peek(e -> System.out.println(e转载 2018-12-12 19:15:14 · 20677 阅读 · 3 评论 -
深入浅出parallelStream
https://blog.csdn.net/u011001723/article/details/52794455about Stream什么是流?Stream是java8中新增加的一个特性,被java猿统称为流.Stream 不是集合元素,它不是数据结构并不保存数据,它是有关算法和计算的,它更像一个高级版本的 Iterator。原始版本的 Iterator,用户只能显式地一个一个遍...转载 2018-12-03 18:16:21 · 1116 阅读 · 0 评论 -
java8 Stream流操作介绍
https://blog.csdn.net/sf_cyl/article/details/51900701 流操作在本人接触到的部分,都是处理集合容器Collection,加入流操作主要是为了函数式编程,在很大程度上可以简化代码简洁的代码处理复杂逻辑这是每个程序猿的追求,废话不多说,开始介绍使用Stream基本步骤1. 创建Stream;2. 转换Stream,每次转换原有S...转载 2019-02-11 11:47:28 · 1497 阅读 · 0 评论 -
java8 map flatmap
https://www.cnblogs.com/diegodu/p/8794857.htmlmap: 对于Stream中包含的元素使用给定的转换函数进行转换操作,新生成的Stream只包含转换生成的元素。这个方法有三个对于原始类型的变种方法,分别是:mapToInt,mapToLong和mapToDouble。这三个方法也比较好理解,比如mapToInt就是把原始Stream转换成一个新...转载 2019-05-28 23:16:09 · 2254 阅读 · 0 评论 -
java8 stream接口 终端操作 forEachOrdered和forEach
Stream.of("AAA","BBB","CCC").parallel().forEach(s->System.out.println("Output:"+s));Stream.of("AAA","BBB","CCC").parallel().forEachOrdered(s->System.out.println("Output:"+s);第二行输出的一直是:AAA...转载 2019-07-02 13:51:53 · 3271 阅读 · 0 评论 -
java8 stream中 forEach和 forEachOrdered 当parallel时候执行过程&安全问题深入理解
直观来看,一般都知道,一个是不按照顺序输出,一个按照顺序输出。那当stream加入了parallel修饰的时候,会怎么处理呢?先来看一个例子:Stream.of("AAA,","BBB,","CCC,","DDD,").parallel().forEach(System.out::print);System.out.println("\n______________________...转载 2019-07-02 13:58:41 · 3995 阅读 · 1 评论 -
Java 8特性探究(2):深入解析默认方法
上篇讲了lambda表达式的语法,但只是 JEP126 特性的一部分,另一部分就是默认方法(也称为虚拟扩展方法或防护方法)什么是默认方法,为什么要有默认方法简单说,就是接口可以有实现方法,而且不需要实现类去实现其方法。只需在方法名前面加个default关键字即可。为什么要有这个特性?首先,之前的接口是个双刃剑,好处是面向抽象而不是面向具体编程,缺陷是,当需要修改接口时候,需转载 2015-11-18 18:42:42 · 1139 阅读 · 1 评论