前言

最近在学习Stream流,写项目时用到了一些map, filter方法,就想着去学习一下,于是就有了下面这篇文章,下面分享了一些常见的方法和介绍…

Lambda表达式

Lambda表达式是Java8之后才有的写法,Lambda表达式基于数学中的 λ演算 得名,直接对应于其中的lambda抽象(lambda abstraction),是一个匿名函数,即没有函数名的函数。 Lambda表达式可以表示 闭包 (注意和数学传统意义上的不同。

格式

lambda表达式可以看成一个匿名的方法,写法更加简洁,可以省略修饰符、返回类型、throws语句。一般看到的形式:(参数) -> 表达式,包含一个参数列表和一个lambda体,二者之间通过一个函数箭头“->''分隔。

(i,j) -> i*j

函数式接口

函数式接口有且只有一个抽象方法的接口,确保接口中仅有一个抽象方法

下面来看个简单的例子:

  1. 首先定义一个接口
public interface Man {

    void speak();
}
  1. 定义一个类实现这个接口,并重写这个方法
public class Dy implements Man{

    @Override
public void speak() {
System.out.println("我是男的");
}
}
  1. 在主类中调用,这样是不是可以正常打印
public static void main(String[] args) {

        test( () -> {
System.out.println("我是个男生");
}); } public static void test(Man man) {
man.speak();
}

Lambda表达式一定是接口,并且是可以通过上下文来推导出Lambda表达式的接口的。

Stream的方法介绍

stream是位于java.util.stream包,包下面后很多的好用的方法,比如我们很常用的Collectors,Stream等等

获取一个Stream的方法有of

public static<T> Stream<T> of(T t) {
return StreamSupport.stream(new Streams.StreamBuilderImpl<>(t), false);
}
forEach

我们可以自己获取一个Stream,然后再一个forEach来遍历

Stream<String> words = Stream.of("flink", "Spark", "storm", "MapReduce");
words.forEach(item -> System.out.println(item));
filter

我们可以使用filter来过滤stream中的数据

List<Integer> list = new LinkedList<>();
list.add(1);
list.add(1);
list.add(1);
list.add(1);
list.add(1);
list.add(2);
list.add(3);
Stream<Integer> stream = list.stream().filter(item ->
item > 1
);
collect

在过滤好之后,我们一般在写一些业务逻辑时会将这个流保存起来

List<Integer> collect1 = list.stream().filter(item ->
item > 1
).collect(Collectors.toList());
count

我们用count来统计数量,这里count返回的是一个long

long count = list.stream().filter(item ->
item > 1
).count();
sum

有了count计数,当然我们也可以使用sum来进行求和了,但是在进行求和前我们需要将数据使用一个mapToInt将我们的数据先映射到我们需要的数据类型上,原生的有mapToInt, mapToDouble, mapToLong, toIntFunction, toLongFunction, ToDoubleFunction

list.stream().mapToInt(Integer::intValue)
.sum();
limit 和skip

获取前n条数据,一般我们处理的都是有序流,如果是无序流的话,这两个都可以说是随机取了

// 获取前两个
Stream<User> limitUserStream = userList.stream().sorted(Comparator.comparing(User::getId))
.limit(2);
//除去前两个
userList.stream().sorted(Comparator.comparing(User::getId))
.skip(2);
groupingBy

我们可以通过某个类进行分类,这个programLanguageList是一个对象的列表,我们根据编程语言进行了一个分类,然后就可以打印出我们需要的结果

Map<String, Long> programMap = programLanguageList.stream()
.collect(Collectors.groupingBy(ProgramLanguage::getLanguage,
Collectors.counting()));
System.out.println(programMap.toString());

当需要对一个Map类型进行收集的时候,我们可以通过Map.Entry来遍历,然后再通过mapping来觉得收集成什么样的数据

Map<String, String> map = new HashMap<>(4);

map.put("java", "基础语法");
map.put("java", "Spring Boot");
map.put("c++", "算法竞赛入门经典");
map.put("c++", "c++ plus"); Map<String, Set<String>> collectMap = map.entrySet().stream()
.collect(Collectors.groupingBy(Map.Entry::getKey,
Collectors.mapping(Map.Entry::getValue, toSet())));
System.out.println(collectMap.toString());

reduce

我们通过reduce来对数据进行一些聚合操作

Integer reduce = list.stream().reduce(0, (a, b) -> a + b);
System.out.println("reduce:" + reduce);

总结

上述是一些常见的Stream的方法,还有一些其他的方法,但是我没有去列出来,相信大家多用用就会了。

Stream方法的介绍的更多相关文章

  1. Java8的Stream方法findAny空指针异常(NullPointerException)实例对比

    实战介绍 学习完Java8的Stream方法,可能你正准备大展身手,却发现遇到不少问题,本篇文章为大家带来一个findAny方法抛出java.lang.NullPointerException的场景. ...

  2. KEGG数据库的使用方法与介绍

    KEGG数据库的使用方法与介绍 KEGG的数据 KEGG中的pathway是根据相关知识手绘的,这里的手绘的意思可能是指人工以特定的语言格式来确定通路各组件的联系:基因组信息主要是从NCBI等数据库中 ...

  3. php常用Stream函数集介绍

    php常用Stream函数集介绍 作者: 字体:[增加 减小] 类型:转载 时间:2013-06-24   本篇文章是对php中的常用Stream函数集进行了详细的分析介绍,需要的朋友参考下     ...

  4. 使用Memcache在PHP中调试方法的介绍及应用

    使用Memcache在PHP中调试方法的介绍及应用 如果我们在网络开发中,特别是大访问量的web项目开发中,为了提高响应速度,减少数据查询运算,那么我们都会选用memcahce.首先我们必须要安装,接 ...

  5. InputStreamReader 和 OutputStreamWriter类使用方法简单介绍,及演示。

    InputStreamReader 和 OutputStreamWriter类使用方法简单介绍. 一.InputStreamReader类 InputStreamReader 将字节流转换为字符流.是 ...

  6. 04-vi使用方法详细介绍

    vi使用方法详细介绍 vi编辑器是所有Unix及Linux系统下标准的编辑器,它的强大不逊色于任何最新的文本编辑器,这里只是简单地介绍一下它的用法和一小部分指令.由于对Unix及Linux系统的任何版 ...

  7. WQL语言简介和WQL测试工具wbemtest.exe使用方法详细介绍

    这篇文章主要介绍了WQL语言简介和WQL测试工具wbemtest.exe使用方法详细介绍,WQL是指Windows管理规范查询语言,需要的朋友可以参考下 WQL就是WMI中的查询语言,WQL的全称是W ...

  8. Python3.x:os.chdir(改变当前路径方法)介绍

    Python3.x:os.chdir(改变当前路径方法)介绍 1,os.chdir() import os os.chdir(r'C:\python36\test_chdir') 说明:chdir() ...

  9. js中propertyIsEnumerable()方法使用介绍

    javascript的propertyIsEnumerable()方法使用介绍 概述 propertyIsEnumerable()用来检测属性是否属于某个对象的,如果检测到了,返回true,否则fal ...

  10. python模块之calendar方法详细介绍

    calendar,是与日历相关的模块.calendar模块文件里定义了很多类型,主要有Calendar,TextCalendar以及HTMLCalendar类型.其中,Calendar是TextCal ...

随机推荐

  1. XML元素限定

    XML元素限定的意义:XML 用于数据交换,而标签又是可以任意定义的,为了让 XML 的编写者和使用者之间能正确交流----->需要对标签等约定.在 XML 中有两种约定方法 dtd 格式和 x ...

  2. jenkins启动失败,查看状态提示active(exited)

    chown -R jenkins:jenkins /var/lib/jenkins chown -R jenkins:jenkins /var/cache/jenkins chown -R jenki ...

  3. UIPath踩坑记一开发环境检查

      第一步:设置--设计--关闭新项目使用新式体验   第二步:Uipath与浏览器的通信护展是否已安装,如果没有安装需要点击安装   第三步:浏览器中安装的扩展是否已经打开

  4. vue3-使用百度地图遇到的坑-地图实例化

    1.创建地图实例 原因:在使用vue3为了只定义一次地图实例,在所有方法中使用,直接使用如下定义方式: setup() { const data = reactive({ bmap: null,}) ...

  5. 一文快速回顾 Servlet、Filter、Listener

    什么是Servlet? 前置知识: Web 服务器:可以指硬件上的,也可以指软件上的.从硬件的角度来说, Web 服务器指的就是一台存储了网络服务软件的计算机:从软件的角度来说, Web 服务器指的是 ...

  6. 痞子衡嵌入式:2021 TencentOS Tiny AIoT应用创新大赛 - 初赛阶段的38个作品速览

    腾讯 TencentOS 团队于2021年12月8日联合恩智浦半导体.安谋科技发起的线上开发者活动 - TencentOS Tiny AIoT 应用创新大赛目前已经进入到了最后的决赛阶段. 参赛者的作 ...

  7. windows2003 DHCP服务器配置

    一.导入光驱 二.安装可选的windows组件 三.双击打开网路服务,安装DHCP/DNS服务器. 注:服务器地址要固定,因此安装时要规划好网络. 四.ip地址范围规划时要预留i出一些p地址.排除ip ...

  8. Javaweb学习笔记第十五弹--Listente概述、AJAX、Axiox、JSON

    Listener(监听器) 可以在application.session和request三个对象创建 Javaweb提供了8个监听器,其中较为典型的是ServletContextListener监听器 ...

  9. MySQL学习(一)大纲

    1.逻辑架构 参考博客:https://blog.csdn.net/fuzhongmin05/article/details/70904190 最上层为客户端层,并非mysql独有,诸如:连接处理.授 ...

  10. 矩形面积k次交 UVA - 11983

    算是模板题,会了面积交这个应该就会了,正常面积交分为覆盖1次以上,两次以上,这个就分为覆盖1到k次以上就行了. 这个题有点边界问题:是让你求覆盖的点,所以你可以假设一个1*1的正方向表示它的左下角被覆 ...