Collection

->stream:返回一个以 colleciotn 元素为数据源的数据流。

-->map: 入参 Function 对象,将此流中的元素依次作用于传入的 Function,然后返回新的数据流。

示例:

List<String> list = new ArrayList<>();
list.add("1");
list.add("10");
list.add("100");
List<Integer> ilist = list
.stream() //流对象
.map(Integer::valueOf) //对元素应用 Integer.valueOf 函数,String 转换为 Integer
.collect(Collectors.toList());

输出:[1, 10, 100]

--peak: 入参 Function 对象,无返回值(void 函数),将此流中的元素依次作用于传入的 Function,然后返回新的数据流

class TOBJ {
String ele; public String getEle() {
return ele;
} public void setEle(String ele) {
this.ele = ele;
} TOBJ(String value) {
this.ele = value;
} @Override
public String toString() {
return "TOBJ{" +
"ele='" + ele + '\'' +
'}';
}
}
List<TOBJ> list = new ArrayList<>();
list.add(new TOBJ("a"));
list.add(new TOBJ("b"));
list.add(new TOBJ("c"));
List<TOBJ> slist = list
.stream() //流对象
.peek(item -> item.setEle(item.getEle().toUpperCase()))
.collect(Collectors.toList());

输出:[TOBJ{ele='A'}, TOBJ{ele='B'}, TOBJ{ele='C'}]

--flatMap: 入参 Function 对象,将此流中的元素依次作用于传入的 Function,产生每个对象的流,然后合并各元素的流返回新的数据流。流合并操作。

示例:

List<String> list = new ArrayList<>();
list.add("1|2|3");
list.add("10|2|30");
list.add("1|200|300");
List<Integer> ilist = list
.stream() //流对象
.map(item -> item .split("\\|")) //分割元素为数组
.flatMap(Arrays::stream)
.map(Integer::valueOf)
.collect(Collectors.toList());

输出:[1, 2, 3, 10, 2, 30, 1, 200, 300]

-->distinct: 去重

 List<String> list = new ArrayList<>();
list.add("1|2|3");
list.add("10|2|30");
list.add("1|200|300");
List<Integer> ilist = list
.stream() //流对象
.map(item -> item .split("\\|")) //分割元素为数组
.flatMap(Arrays::stream)
.map(Integer::valueOf)
.distinct()
.collect(Collectors.toList());

输出:[1, 2, 3, 10, 30, 200, 300]

-->sorted:入参 Comparator,根据传入的Comparator排序。

class TOBJ {
String ele; public String getEle() {
return ele;
} public void setEle(String ele) {
this.ele = ele;
} TOBJ(String value) {
this.ele = value;
} @Override
public String toString() {
return "TOBJ{" +
"ele='" + ele + '\'' +
'}';
}
}
List<TOBJ> list = new ArrayList<>();
list.add(new TOBJ("d"));
list.add(new TOBJ("b"));
list.add(new TOBJ("c"));
List<TOBJ> slist = list
.stream() //流对象
.sorted(Comparator.comparing(TOBJ::getEle)) //根据 ele 元素排序
.collect(Collectors.toList());

输出:[TOBJ{ele='b'}, TOBJ{ele='c'}, TOBJ{ele='d'}]

--reduce: 入参 BinaryOperator,对流元素做连续两两运算,最后返回与流元素相同类型结果:

List<Integer> ilist = new ArrayList(){{
add();
add();
add();
add();
}};
Optional<Integer> sum = ilist.stream().reduce(Integer::sum);

输出:Optional[109]

--> ... ...

Java Lamada的更多相关文章

  1. Spark案例分析

    一.需求:计算网页访问量前三名 import org.apache.spark.rdd.RDD import org.apache.spark.{SparkConf, SparkContext} /* ...

  2. Java 8之二小坑:stream parallel 和 lamada

    Stream:parallel乱序 Java 8 stream流为处理集合时非常方便.遇到的一个坑是为了提高在多核cpu下的性能,尝试了parallel().数据源是HashSet的,在做分割的时候发 ...

  3. Java简单实现AOP,Java通用异常拦截,Java与Lamada

    直接看代码不废话.不懂Lamada直接百度... package test; /** * QQ:1448376744 * @author 花间岛 * */ //控制器 public class Con ...

  4. Upgrading to Java 8——第一章 Lambda表达式

    第一章 Lambda表达式 Lamada 表达式是Java SE 8中最重要的新特性,长期以来被认为是在Java中缺失的特性,它的出现使整个java 语言变得完整.至少到目前,在这节中你将学习到什么是 ...

  5. 201521123057 《Java程序设计》 第6周学习总结

    1. 本周学习总结 1.1 面向对象学习暂告一段落,请使用思维导图,以封装.继承.多态为核心概念画一张思维导图,对面向对象思想进行一个总结. 2. 书面作业 1.clone方法 1.1 Object对 ...

  6. 【Java入门提高篇】Day31 Java容器类详解(十三)TreeSet详解

    上一篇很水的介绍完了TreeMap,这一篇来看看更水的TreeSet. 本文将从以下几个角度进行展开: 1.TreeSet简介和使用栗子 2.TreeSet源码分析 本篇大约需食用10分钟,各位看官请 ...

  7. 【Java入门提高篇】Day20 Java容器类详解(三)List接口

    今天要说的是Collection族长下的三名大将之一,List,Set,Queue中的List,它们都继承自Collection接口,所以Collection接口的所有操作,它们自然也是有的. Lis ...

  8. Java知识回顾 (18)Java 8、9、11的新特性

    Java 8 Java 8 (又称为 jdk 1.8) 是 Java 语言开发的一个主要版本. Oracle 公司于 2014 年 3 月 18 日发布 Java 8 ,它支持函数式编程,新的 Jav ...

  9. [Java复习] Spring IoC

    1. Spring bean的生命周期? 1. 对Bean进行实例化(相当于new) 对于BeanFactory 当客户向容器请求一个尚未初始化的bean(或初始化bean需要注入另外一个尚未初始化的 ...

随机推荐

  1. W3C 带来了一个新的语言

    2019年12月5日,W3C 宣布: WebAssembly 核心规范 正式成为 Web 官方标准. 继 HTML, CSS, JavaScript 之后,WebAssembly 成为了第4个 Web ...

  2. Java单体应用 - 导读

    原文地址:http://www.work100.net/training/monolithic 更多教程:光束云 - 免费课程 Java单体应用 本阶段课程将学习如何进行Java单体Web应用开发,经 ...

  3. redis server can not continue

  4. 字符串(String)的创建,以及字符串的属性及方法

    1.String对象的创建 方法1: var txt = new String("i am String"); console.log(txt); // 结果为:i am Stri ...

  5. X-CTF(REVERSE高级) Reversing-x64Elf-100

    逻辑很简单,如果sub_4006FD函数返回假则返回Nice! 图1 进入sub_4006FD函数,加密过程也很简单,这里值得注意的有两点 一.8*(i%3)是二维数组的第一个参数,这里是取v3的地址 ...

  6. Docker三剑客之swarm

    简介 swarm是一种docker集群管理工具,跟三剑客前两者不同的是:compose是一种统一编排的工具,machine是一种远程控制工具,swarm则是将多个docker主机映射成一个docker ...

  7. 在Linux环境下设置 ora-01031:insufficient privileges解决方法总结

    今天需要使用sys用户处理问题,但是报错上面ora-01031:insufficient privileges. 在网上有很多方法,这个是自己经过测试的方法步骤. 1:首先检查文件sqlnet.ora ...

  8. C语言系列之自增自减运算符的用法(二)

    运算符中最难理解的有自增自减运算符的使用方法,下面我将简单总结一下他们的使用方法 我们知道,C语言运行是由右向左运行的 下面我们来看一个例子 当i等于3的时候 j=++i; 由上面可知,C语言是由右向 ...

  9. FFMPEG学习----分离视频里的H.264与YUV数据

    #include <stdio.h> extern "C" { #include "libavcodec/avcodec.h" #include & ...

  10. Codeforces_837

    A.扫一遍. #include<bits/stdc++.h> using namespace std; int n; string s; int main() { cin >> ...