java8-07-自定义collector-tolist - 编程思维

[TOC] 声明 这一系列文章旨在帮助大家理解 Collector 的执行流程,至于实现的是否高效、是否优雅、是否合理等暂且不论。 现在来实现一个和 java.util.stream.Collectors#toList 一样效果的 ToListCollector。 若对 Collector 的各个流程有疑问请移驾此处:http://blog.csdn.net/hylexus/... 简单实现

java8-08-自定义collector-groupby - 编程思维

[TOC] 声明 这一系列文章旨在帮助大家理解 Collector 的执行流程,至于实现的是否高效、是否优雅、是否合理等暂且不论。 现在来实现一个和 java.util.stream.Collectors#groupingBy() 一样效果的 GroupByCollector。 当然此处的实现肯定没有jdk那样灵活,效率就先不提了,至少贫道的这个实现不支持多级分组V_V。 若对 Collect

java8-09-自定义collector-groupby2 - 编程思维

[TOC] 声明 这一系列文章旨在帮助大家理解 Collector 的执行流程,至于实现的是否高效、是否优雅、是否合理等暂且不论。 若对 Collector 的各个流程有疑问请移驾此处:http://blog.csdn.net/hylexus/... 年末了,坑爹的本命年也很快结束了,今天写本命年最后一篇博客: 看着这些名门正派的武功心法(Collectos源码),心底往往会泛起一股淡淡的忧伤

java8-流 - 编程思维

目录 简介 用法 例子 注意点 一. 简介 流是Java8引入的一个新特性,提供了对集合元素一系列便捷的操作,可以用很少的代码实现复杂的功能。流有两大类,分别是对象流(Stream),基本数据流(IntStream、LongStream、DoubleStream)。 二.用法 流的使用通常为三个步骤:①创建流 ②描述流 ③求值 创建流 通过Stream静态工厂方法来创建,Stream类提供了

java 8 completablefuture 教程 - 编程思维

Java 8 有大量的新特性和增强如 Lambda 表达式,Streams,CompletableFuture等。在本篇文章中我将详细解释清楚CompletableFuture以及它所有方法的使用。 什么是CompletableFuture? 在Java中CompletableFuture用于异步编程,异步编程是编写非阻塞的代码,运行的任务在一个单独的线程,与主线程隔离,并且会通知主线程它的进度

java map 通过 key 或者 value 过滤 - 编程思维

今天写根过滤的时候一下子有点愣眼,先是想到用 Java 原生的 map 循环查出来,但是觉得太 low, 后面思考了一下可以用 Java8 的 Lambda,写完了,又发现 Google Guava 有现成的方法,这里一一列出来,供参考使用。 首先提示,如果照搬我的代码的话别忘了引这些依赖 <dependencies> <dependency>

java语法糖和语法糖编译 - 编程思维

首先,部分总结文字引用 简书作者:Eric新之助 。链接:https://www.jianshu.com/p/4de08deb6ba4 已获得授权 先简单了解下定义 语法糖 语法糖(Syntactic Sugar),也叫糖衣语法,是英国计算机科学家彼得·约翰·兰达(Peter J. Landin)发明的一个术语。指的是,在计算机语言中添加某种语法,这种语法能使程序员更方便的使用语言开发程序

lambda和stream - 编程思维

Java11已出,Java8已是主流。现在来一波操作,应该不会太迟(T_T)注:本文持续更新 ^_^ 1. 前言 本文主要介绍Java8的2大主要新特性lambda表达式和Stream API,2者提供了更高层次的抽象,简化开发,提高生产效率。 2. Lambda表达式 2.1 初识Lambda表达式 创建一个线程,使用了一个Runnable匿名内部类 Thread thread = new

functional接口简介 - 编程思维

Functional接口简介 什么是Functional接口?包含有单一抽象方法(Single Abstract Method)的接口就是Functional接口。简单来说,就是有且只有一个非default方法的接口。为什么default方法不被计算进去呢?原因也很简单,因为default方法是已经有了一个实现了啊,所以并不是抽象的。 所有Functional接口都建议打上@Functi

function包概述及大纲 - 编程思维

大家有没有发现java.util.function包(本文后面简称function包)下的接口虽然比较多(目前共43个),但都是定义很简单的(方法很少),而我们理解起来却十分的困难。其实啊,这也不怪大家,是因为这个包下的接口并不是典型的Java的API,你可以说它们是“异类”。那么问题来了,典型的Java API是什么样子的呢?function包下的接口又“异”在哪里? 总所周知,Java是一种

使用javap深入理解java整型常量和整型变量的区别 - 编程思维

我下图代码第五行和第九行分别定义了一个整型变量和一个整型常量: static final int number1 = 512; static int number3 = 545; Java程序员都知道两者的区别。 下面我们就用javap将.class文件反编译出来然后深入研究Java里整型变量和整型常量的区别。 使用命令行javap -c constant.ConstantFolding查看.

function相关接口简介 - 编程思维

Function相关接口简介 什么是Function接口? interface Function<T, R>,它代表这样的一个函数,接受一个参数,然后返回一个结果。 Function接口的functional方法 R apply(T t) 表示,接受一个类型为T的参数t,返回一个类型为R的结果。注意: T和R可以是同一种类型,当然也可以是不同的类型。 这里只接受一个参数。 那

java8新特性lambda和stream - 编程思维

Java8出来已经4年,但还是有很多人用上了jdk8,但并没用到里面的新东西,那不就等于没用?jdk8有许多的新特性,详细可看下面脑图 我只讲两个最重要的特性Lambda和Stram,配合起来用可以极大提高生产力,写出高效率、干净、简洁的代码。 一、Lambda表达式 Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。 语法 lambda 表达式的语法格式如下: (par

java 8 strem基本操作 - 编程思维

本文提供了有关Java 8 Stream的深入概述。当我第一次读到的Stream API,我感到很困惑,因为它听起来类似Java I/O的InputStream,OutputStream。但Java 8 Stream是完全不同的东西。Streams是Monads,因此在为Java提供函数式编程方面发挥了重要作用: 在函数式编程中,monad是表示定义为步骤序列的计算的结构。具有monad结构的类

java 8 strem高级操作 - 编程思维

Streams支持大量不同的操作。我们已经了解了最重要的操作,如filter,map。发现所有其他可用的操作(参见Stream Javadoc)。我们深入研究更复杂的操作collect,flatMap,reduce。 本节中的大多数代码示例使用以下人员列表进行演示: class Person { String name; int age; Person(String n

java 8 stream并行流 - 编程思维

流可以并行执行,以增加大量输入元素的运行时性能。并行流ForkJoinPool通过静态ForkJoinPool.commonPool()方法使用公共可用的流。底层线程池的大小最多使用五个线程 - 具体取决于可用物理CPU核心的数量: ForkJoinPool commonPool = ForkJoinPool.commonPool(); System.out.println(commonPool

java通过smtp服务 给指定邮箱发送邮件含附件 - 编程思维

用程序发邮件首先需要一个smtp服务器, 虽然说网上也有自建服务器的教程,但是由于工程量大, 还要兼容各大邮箱厂商,有可能发送失败或被归为垃圾邮件。 所以不推荐自建smtp服务器实现。 推荐是有2种方法来实现 第三方邮箱发邮件 1、买类似阿里云的smtp资源包(阿里云 1000条 / 2元) 2、申请一个腾讯、网易163的邮箱,开通smtp服务端口,借由他们的服务器来转发。 (其中部分第三方邮箱

java8 内置函数(api)总结 - 编程思维

常用的函数接口记录方便以后翻吧 接口 参数 返回类型 说明 Predicate<T> T boolean 输入某个值,输出boolean 值,用于对某值进行判定 Consumer<T> T void 输入某值,无输出。用于消费某值 Function<T,R> T R 输入某类型值,输出另种类型值,用于类型转化等 Supplier<T

说说java 位运算 - 编程思维

本文首发于个人微信公众号《andyqian》,期待你的关注 前言 我们都知道,在计算机世界里,再复杂,再美的程序,到最后都会变成0与1。也就是我们常说的:二进制。二进制相信大家都很熟悉。与现实世界不同的是,在现实世界里,我们通常都是用十进制来表示的,也就是遇十进一,这些都是我们熟悉的。到这里,我们就会发现端倪,现实世界中的十进制与计算机中的二进制其计量单元是不一样的。那它们之间怎么转换呢?这