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. Error:Cannot build artifact 'XXX:war exploded' because it is included into a circular dependency (artifact 'XXXX:war exploded', artifact 'XXX:war exploded') Idea启动项目报错解决方案

    在Idea中使用Maven创建父子工程,第一个Model的那个项目可以很好的运行,在创建一个Model运行时报这个错.原因是tomcat部署了多个Web项目,可能最开始是两个项目的配置文件混用用,最后 ...

  2. linux容器技术之chroot

    linux容器技术之chroot linux chroot 机制的由来 root 用户启动一个daemon,必须用root 用户来启动,比如一个web 服务器(nginx/apapce 80端口)是在 ...

  3. 外网通过frp进行windows远程文件共享

    需求 远程访问位于内网中的文件.例如,家里,公司内. 所需技术 frp windows文件共享 具有公网地址的服务器一台 实现过程 windows文件共享,首先自己在局域网内实现.这不是本文重点. 公 ...

  4. java8 stream按对象多个属性对集合进行分组,并进行组装数据

    如图,数据库查出来的数据: 需求是按menu_id和menu_name分组,stream实现最简单, stream里面只有按一个属性分组的,但是可以利用string简单变换一下: List<Js ...

  5. Leetcode 题目整理-6 Swap Nodes in Pairs & Remove Duplicates from Sorted Array

    24. Swap Nodes in Pairs Given a linked list, swap every two adjacent nodes and return its head. For ...

  6. 脚本在Shell可以执行成功,放到crontab里执行失败

    一.背景 自己写了个监控MGR状态的脚本,直接在Linux的Shell环境下可以执行成功,但是只要放到crontab里执行,就失败,脚本内容如下 #!/bin/bash MAIL_ADDR=`cat ...

  7. Java 程序是如何执行的

    Java 程序是如何执行的 了解任何一门语言的精髓都是先俯览其全貌,从宏观的视角把握全局,然后再深入每个知识点逐个击破,这样就可以深入而快速的掌握一项技能.同样学习 Java 也是如此,本节就让我们先 ...

  8. 技术派-github常见的一些用法和缩写

    PR: Pull Request. 拉取请求,给其他项目提交代码 LGTM: Looks Good To Me.  看起来不错,代码已 review,可以合并 SGTM: Sounds Good To ...

  9. Linux文件和目录的属性及权限总结

    本文讲述的是文件或目录的属性及权限,比如索引节点inode.文件类型.文件权限及属主:还对setuid.setgid及粘贴位进行了相关的讲解.其中,对ln.chmod.chown.chgrp.umas ...

  10. Linux/UNIX编程:实现简单 tee 命令

    思路很简单,从标准输入文件描述符读入数据,然后同时向标准输出和参数指定的文件写出数据:如果加了 -a 选项,则以追加的方式向文件写出数据.还没了解 getopt() 函数就没判断参数是否合法. #in ...