Java8新特性steam流

一、包装数据类型

@Test
public void main22() {
List<Integer> list = new ArrayList<Integer>(){{
add(7); add(5); add(1); add(2);
add(8); add(4); add(3); add(6);
add(3); add(6); add(3); add(6);
}};
// 过滤
List<Integer> filterList = list.stream().filter(a -> a < 5).collect(Collectors.toList());
// 排序(正序)
List<Integer> sortList1 = list.stream().sorted().collect(Collectors.toList());
List<Integer> sortList2 = list.stream().sorted(Comparator.comparing(a -> a, Comparator.naturalOrder())).collect(Collectors.toList());
// 排序(倒序)
List<Integer> sortList3 = list.stream().sorted(Comparator.comparing(a -> a, Comparator.reverseOrder())).collect(Collectors.toList());
// 最大数
Integer max = list.stream().max(Comparator.comparing(a -> a, Comparator.naturalOrder())).get();
// 最小数
Integer min = list.stream().min(Comparator.comparing(a -> a, Comparator.naturalOrder())).get();
// 去重
List<Integer> distinctList = list.stream().distinct().collect(Collectors.toList());
// 对每个元素进行操作
List<Integer> mapList = list.stream().map(a -> a * a).collect(Collectors.toList()); System.out.println(max);
System.out.println(min);
mapList.forEach(a -> System.out.print(a+" "));
}

二、Map类型

import org.apache.commons.lang.StringUtils;

@Test
public void test() {
HashMap<String, Integer> map = new HashMap<String, Integer>(){{
put("A", 1); put("B", 2); put("C", 3); put("D", 4);
put("E", 1); put("F", 1); put("", 1); put("", 1);
}};
// key集合转list
List<String> keyList1 = map.keySet().stream().filter(a -> StringUtils.isNotBlank(a)).collect(Collectors.toList());
List<String> keyList2 = map.entrySet().stream().map(entry -> entry.getKey()).filter(a -> StringUtils.isNotBlank(a)).collect(Collectors.toList());
// value集合转list
List<Integer> valueList = map.entrySet().stream().map(entry -> entry.getValue()).collect(Collectors.toList());
// 处理value,同理可处理key
Map<String, Integer> newMap = map.entrySet().stream().collect(Collectors.toMap(Map.Entry::getKey, a -> a.getValue() * a.getValue()));
// key value换位,key冲突时,新value替换旧value
Map<Integer, String> reMap1 = map.entrySet().stream().collect(Collectors.toMap(Map.Entry::getValue,
Map.Entry::getKey,
(String val1, String val2) -> val2
));
// key value换位,key冲突时,加入value列表中
Map<Integer, List<String>> reMap2 = map.entrySet().stream().collect(Collectors.toMap(Map.Entry::getValue,
a -> new ArrayList<String>(){{ add(a.getKey()); }},
(List<String> v1, List<String> v2) -> {
v1.addAll(v2);
return v1;
}
)); keyList2.forEach(a -> System.out.printf(a + " "));
System.out.println();
reMap2.entrySet().forEach(entry -> System.out.println("key: " + entry.getKey() + ", val: " + entry.getValue()));
}

三、对象List

@Test
public void test() {
List<User> list = new ArrayList<User>() {{
add(new User(1, "半月", 18));
add(new User(2, "无霜", 22));
add(new User(3, "半月无霜", 24));
add(new User(3, "半霜", 28));
add(new User(4, "半霜", 28));
}};
// 转Map<id, user>,如遇到key冲突,可参考第二段map解决办法
Map<Integer, User> map1 = list.stream().collect(Collectors.toMap(User::getId, Function.identity()));
Map<Integer, User> map2 = list.stream().collect(Collectors.toMap(User::getId, a -> a));
// 查找
User user = list.stream().filter(a -> "半月".equals(a.getName())).findFirst().get();
// 过滤计数
long count = list.stream().filter(a -> a.getAge() >= 22).count();
// 排序(通过年龄排正序)
List<User> orderList = list.stream().sorted(Comparator.comparing(User::getAge, Comparator.naturalOrder())).collect(Collectors.toList());
// 排序(通过年龄排倒序)
List<User> reorderList = list.stream().sorted(Comparator.comparing(User::getAge, Comparator.reverseOrder())).collect(Collectors.toList());
// 对象去重(通过ID去重)
List<User> unionUser = list.stream().collect(
Collectors.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator.comparing(o -> o.getId()))), ArrayList::new));
// 属性集合(此处为名字集合)
List<String> nameList = list.stream().map(User::getName).collect(Collectors.toList());
// 截取,skip:跳过前n个,limit:取n个
List<User> limitList = list.stream().skip(1).limit(2).collect(Collectors.toList());
// 判断是否存在(半月是否存在)
boolean isHave1 = list.stream().anyMatch(a -> "半月".equals(a.getName()));
// 判断所有是否满足(是否都大于16岁)
boolean fullAge = list.stream().allMatch(a -> a.getAge() > 16);
// 判断是否不存在(里面没有ID为10的用户)
boolean isHave2 = list.stream().noneMatch(a -> "10".equals(a.getId())); limitList.forEach(System.out::println);
System.out.println(isHave2? "没有ID为10的用户": "有ID为10的用户");
} @Data
@AllArgsConstructor
class User{
private Integer id;
private String name;
private Integer age;
}

功能:Java8新特性steam流的更多相关文章

  1. Java8 新特性之流式数据处理

    一. 流式处理简介 在我接触到java8流式处理的时候,我的第一感觉是流式处理让集合操作变得简洁了许多,通常我们需要多行代码才能完成的操作,借助于流式处理可以在一行中实现.比如我们希望对一个包含整数的 ...

  2. Java8 新特性之流式数据处理(转)

    转自:https://www.cnblogs.com/shenlanzhizun/p/6027042.html 一. 流式处理简介 在我接触到java8流式处理的时候,我的第一感觉是流式处理让集合操作 ...

  3. 这可能是史上最好的 Java8 新特性 Stream 流教程

    本文翻译自 https://winterbe.com/posts/2014/07/31/java8-stream-tutorial-examples/ 作者: @Winterbe 欢迎关注个人微信公众 ...

  4. Java8新特性 Stream流式思想(二)

    如何获取Stream流刚开始写博客,有一些不到位的地方,还请各位论坛大佬见谅,谢谢! package cn.com.zq.demo01.Stream.test01.Stream; import org ...

  5. Java8 新特性 Steam() 中间有状态操作

    中间有状态操作 Java8 新特性 Stream 练习实例   中间操作,就是把数据处理成自己想要的类型,并且有状态操作,是在所有的数据基础上进行操作的.比如dictinct(去重),sorted(排 ...

  6. Java8新特性Stream流应用示例

    Java8新特性介绍 过滤集合 List<String> newList = list.stream().filter(item -> item != null).collect(C ...

  7. java8新特性——并行流与顺序流

    在我们开发过程中,我们都知道想要提高程序效率,我们可以启用多线程去并行处理,而java8中对数据处理也提供了它得并行方法,今天就来简单学习一下java8中得并行流与顺序流. 并行流就是把一个内容分成多 ...

  8. Java8 新特性 —— Stream 流式编程

    本文部分摘自 On Java 8 流概述 集合优化了对象的存储,大多数情况下,我们将对象存储在集合是为了处理他们.使用流可以帮助我们处理对象,无需迭代集合中的元素,即可直接提取和操作元素,并添加了很多 ...

  9. java8 新特性Stream流的应用

    作为一个合格的程序员,如何让代码更简洁明了,提升编码速度尼. 今天跟着我一起来学习下java 8  stream 流的应用吧. 废话不多说,直入正题. 考虑以下业务场景,有四个人员信息,我们需要根据性 ...

随机推荐

  1. 后端程序员之路 23、一个c++的api framework

    在"21.一个cgi的c++封装"中,我们封装了cgi,在这之上,我们可以再来封装一个webapi的framework.当然,前文的Casablanca是个不错的选择,但是它比较庞 ...

  2. Java方法详解

    Java方法详解 什么是方法? Java方法是语句的集合,它们在一起执行一个功能. 方法是解决一类问题的步骤的有序组合 方法包含于类或对象中 方法在程序中被创建,在其他地方被引用 示例: packag ...

  3. Mybatis系列全解(四):全网最全!Mybatis配置文件XML全貌详解

    封面:洛小汐 作者:潘潘 做大事和做小事的难度是一样的.两者都会消耗你的时间和精力,所以如果决心做事,就要做大事,要确保你的梦想值得追求,未来的收获可以配得上你的努力. 前言 上一篇文章 <My ...

  4. 腾讯云容器服务 TKE 拿下新加坡 MTCS 最高级别安全认证

    近日,腾讯云容器服务 TKE 荣获新加坡 MTCS 最高级安全认证,标志着腾讯云 TKE 在为用户提供可靠.易部署.灵活扩展等基础服务上,已经全面满足了新加坡监管机构以及多个行业客户对服务安全的要求. ...

  5. pygame模块使用时出现AttributeError: module ‘pygame’ has no attribute '…'错误解决方法

    pygame模块使用时出现AttributeError: module 'pygame' has no attribute '-'错误解决方法 首先在pygame中存在init()模块,出现这样的问题 ...

  6. `vi`——终端中的编辑器

    `vi`--终端中的编辑器 目标* `vi` 简介* 打开和新建文件* 三种工作模式* 常用命令* 分屏命令* 常用命令速查图 01. `vi` 简介 1.1 学习 `vi` 的目的 * 在工作中,要 ...

  7. Image Super-Resolution via Sparse Representation——基于稀疏表示的超分辨率重建

    经典超分辨率重建论文,基于稀疏表示.下面首先介绍稀疏表示,然后介绍论文的基本思想和算法优化过程,最后使用python进行实验. 稀疏表示 稀疏表示是指,使用过完备字典中少量向量的线性组合来表示某个元素 ...

  8. NET5 ORM 六大新功能 - SqlSugar 5.0.2.7

    介绍 SqlSugar是一款 老牌 .NET 开源ORM框架,并且在第一时间兼容.NET5,由果糖大数据科技团队维护和更新 ,Github star数仅次于EF 和 Dapper 优点: 简单易用.功 ...

  9. C# 读取Word文本框中的文本、图片和表格(附VB.NET代码)

    [概述] Word中可插入文本框,在文本框中可添加文本.图片.表格等内容.本篇文章通过C#程序代码介绍如何来读取文本框中的文本.图片和表格等内容.附VB.NET代码,有需要可作参考. [程序环境] 程 ...

  10. 08、元组tuple

    元组(tuple) 是一个有序且不可变的容器,在里面可以存放多个不同类型的元素 元组是在最后多一个逗号,用于表示它是一个元组 tuple = (11,22,'阿斯顿','媚媚',) #后面多加一个逗号 ...