​一、组成及特点

  • 数据源、中间操作、终端操作
  • 流只能使用一次
  • 并行流 和 串行流

    二、可以产生流的数据源
  • 集合、文件

    三、中间操作
  • 字符串操作拼接joining(""),底层实现是StringBuilder.append();
//例1
private static String appendStr(){
List<String> stringList = Arrays.asList("h","e","l","l","o");
String str = stringList.stream().collect(Collectors.joining("-"));
//结果: h-e-l-l-o
return str;
}
//例2
public class ShangPin {
private String id;
private String mc; //getter ..,setter
public static void main(String[] args) {
List<ShangPin> list = new ArrayList<>();
for (int i = 0; i < 5 ; i++) {
ShangPin shangPin = new ShangPin();
shangPin.setId(i+"");
shangPin.setMc("名称"+i);
list.add(shangPin);
}
//名称逗号分割
String mcs = list.stream().map( shangPin -> shangPin.getMc()).collect(Collectors.joining(","));
System.out.println(mcs);
}
}
  • for循环
public static void test17(){
List<String> list = Arrays.asList("j","a","k","l");
list.forEach(x->{
System.out.println(x);
});
}
  • 筛选
@Test
public void test7(){
List<String> stringList = new ArrayList<>();
JSONArray jsonArray = new JSONArray();
//数据源
for (int i = 0; i < 4; i++) {
stringList.add(i+"");
JSONObject jsonObject = new JSONObject();
jsonObject.put("num",i+"");
jsonArray.add(jsonObject);
}
//中间-筛选
Stream<String> stream = stringList.stream().filter(x -> "1".equals(x) || "3".equals(x));
Stream<JSONObject> _stream = jsonArray.stream().filter( o ->{
String num = ((JSONObject)o).getString("num");
return "1".equals(num) || "3".equals(num);
} );
//终端-收集 单个(类似 for循环里break )/集合
//String str = stream.findFirst().get();
//JSONObject json = _stream.findFirst().get();
List<String> str = stream.collect(Collectors.toList());
JSONArray _str = _stream.collect(Collectors.toCollection(JSONArray::new));
}
  • for循环+break 被替换
  • filter过滤,for循环里的 break 可以用 findFirst
public static void test11(){
String[] str = {"1","2","3","4","5","6","7","8","12","10","11","14"};
List<String> list = Arrays.asList(str);
String s = list.stream().filter( x -> (Integer.parseInt(x))%2 == 0).findAny().get();
System.out.println(s);
/*for (int i = 0; i < str.length; i++) {
if((Integer.parseInt(str[i]))%2 == 0){
System.out.println(str[i]);
break;
}
}*/
}
  • 数值比较/求和/排序
public static void test12(){
String[] str = {"1","1","15","4","5","6","7","8","12","10","11","14"};
//转为int后求和
int sum = Arrays.stream(str).mapToInt(x -> Integer.parseInt(x)).sum();
//求和2,自定义
int sum2 = Arrays.stream(str).mapToInt(x -> Integer.parseInt(x)).reduce(2,(m,n)->m+n);
System.out.println(sum+"+2="+sum2);
//最大值max(),最小值min 比较器实现
String max = Arrays.stream(str).max(DemoApplicationTests::compator).get();
//数组长度
long length = Arrays.stream(str).count();
//排序 当前从小到大
List list = Arrays.stream(str).sorted(DemoApplicationTests::compator).collect(Collectors.toList());
System.out.println(list);
System.out.println(length);
System.out.println(sum+"--"+max);
}
private static int compator(String x1, String x2) {
if(Integer.parseInt(x1) < Integer.parseInt(x2)){
return -1;
}else if(Integer.parseInt(x1) == Integer.parseInt(x2)){
return 0;
}else{
return 1;
}
}
  • 去重/截取
public static void test13(){
String[] str = {"1","1","15","4","11","6","7","8","12","10","11","14"};
//去重 distinct
List strList = Arrays.stream(str).distinct().collect(Collectors.toList());
//前四(长度)个
List strList1 = Arrays.stream(str).limit(4).collect(Collectors.toList());
//跳过4个
List strList2 = Arrays.stream(str).skip(4).collect(Collectors.toList());
System.out.println(strList2);
}
  • limit+skip 实现截取集合
  • 分割集合
public static void test14(){
int dayNum = 5;
List<String> strList = Arrays.asList("2","2","2","2","2",
"4","4","4","4","4",
"8","8","8","8","8");
//总天数
int sumDay = strList.size();
//分3周
int week = sumDay%dayNum == 0 ? sumDay/dayNum:sumDay/dayNum+1;

List list = Stream.iterate(0,n->n+1).
//3周
limit(week).
//并行流
parallel().
map(
//循环,并返回值
num -> {
System.out.println(num);
List<String> list1 = strList.stream().
//跳过0*5个,取5个,即 0-5,
//跳过1*5;取5个,5-10,。。。
skip(num * dayNum).
limit(dayNum).
collect(Collectors.toList());
//求和
Double d = list1.stream().mapToDouble(x -> Double.valueOf(x) ).sum();
return d+"";
}
).
collect(ArrayList::new,ArrayList::add,List::addAll);
System.out.println(list);
}
  • 数据处理 map,结果收集
public static void test15(){
//构建数据源
JSONArray jsonArray = new JSONArray();
for (int i = 0; i < 6 ; i++) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("mc","mc"+i);
jsonObject.put("xm","word"+i);
jsonArray.add(jsonObject);
}
//创建流
Stream<JSONObject> stream = jsonArray.stream();
//中间操作filter(条件过滤)/map(数据处理返回)/peek(调试时无返回)
Stream<JSONObject> streams = stream.
filter(obj -> !"mc0".equals(obj.getString("mc"))).
map(ele -> {
ele.put("xm","fyhh");
return ele;
});
//终端操作 收集/循环
JSONArray newArr = streams.collect(Collectors.toCollection(JSONArray::new));
//JSONArray newArr = streams.collect(JSONArray::new,JSONArray::add,JSONArray::addAll);
//JSONArray newArr = streams.collect(()-> new JSONArray(),(arrt,json)->{arrt.add(json);},(parr,json) ->{parr.addAll(json);});
//List list = streams.collect(Collectors.toCollection(ArrayList::new));
System.out.println(newArr);
}
  • 逻辑与/或
public static void test16(){
List lsi = Arrays.asList("false","true","true");
//逻辑或,只要有一个为"true",即返回true,否则else; false||true||false 结果:false、true、--true(短路)
boolean flg = lsi.stream().anyMatch(x -> {
System.out.print(x+"、");
return "true".equals(x);
});
System.out.println("flg--"+flg);
//逻辑与 false&&true&&false 都为"true",才返回true,否则返回false
boolean flg2 = lsi.stream().allMatch(x -> {
System.out.print(x+"、");
return "true".equals(x);
});
System.out.println("flg2--"+flg2);
//anyMatch 取反,都不是"true",才返回true;否则else,
boolean flg3 = lsi.stream().noneMatch(x -> {
System.out.print(x+"、");
return "true".equals(x);
});
System.out.println("flg3--"+flg3);
}

四、数据收集collect

  • List 转 Map
public static void test18(){
List<String> list = Arrays.asList("j","a","k","a","l");
//推荐
Map<String,String> mp = list.stream().collect(HashMap::new,(theMap,ele) -> {
theMap.put(ele,ele+"==");
},Map::putAll);
//不推荐,key重复会有异常 java.lang.IllegalStateException: Duplicate key a==
/* Map<String,String> collect2 = list.stream()
.collect(Collectors.toMap(ele ->ele,
ele ->ele+"=="));*/
System.out.println(mp);
}
  • List 转JSONarray
public static void test20(){
List<JSONObject> list = new ArrayList<>();
for (int i = 0; i <4; i++) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("a"+i,22.5*i);
list.add(jsonObject);
}
JSONArray jsonArray = list.stream().collect(JSONArray::new,(theArr,json) -> {
theArr.add(json);
},JSONArray::addAll);
System.out.println(jsonArray);
}

五、文件

public class FileUtils {

public static void main(String[] args) throws IOException, URISyntaxException {
FileUtils fileUtils = new FileUtils();
JSONObject json = fileUtils.getJsonFromCfg("/config/fyjing.json");
System.out.println(json);
}
/**
* json配置文职转为json
*/
public JSONObject getJsonFromCfg(String path) throws URISyntaxException, IOException {
//获取项目的绝对路径
URL allPath = FileUtils.class.getResource(path);
//URI 格式为 f:/F:/......
URI uri = allPath.toURI();
//Paths.get(uri) 为 F:/.....
String jsonStr = Files.lines(Paths.get(uri)).map(x->x.trim()).collect(Collectors.joining());
//字符串转json
JSONObject json = JSONObject.fromObject(jsonStr);
return json;
}
}

六、判断空指针

@Test
public void testw(){
JSONObject jsonObject = new JSONObject();
jsonObject.put("name", "2");
String name = getNameJson(jsonObject);
}
private String getNameJson(JSONObject jsonObject) {
return Optional.ofNullable(jsonObject).map(x -> {
String name = x.getString("name");
return name;
}).orElseThrow(()->new RessException("",500));
}

这可能是项目中最实用的java8示例了,还不来看?的更多相关文章

  1. 在vue-cli项目中使用bootstrap的方法示例

    在一个html页面中加入bootstrap是很方便,就是一般的将css和js文件通过Link和Script标签就行. 那么在一个用vue-cli生成的前端项目中如何加入?因为框架不一样了,略微要适应一 ...

  2. 项目中使用的ajax代码_:觉得还好

    POST>> submitHandler:function(form){ var username = $('#user_name').val(); var password = $('# ...

  3. 如何优雅地在React项目中使用Redux

    前言 或许你当前的项目还没有到应用Redux的程度,但提前了解一下也没有坏处,本文不会安利大家使用Redux 概念 首先我们会用到哪些框架和工具呢? React UI框架 Redux 状态管理工具,与 ...

  4. 在Android项目中使用Java8

    前言 在过去的文章中我介绍过Java8的一些新特性,包括: Java8新特性第1章(Lambda表达式) Java8新特性第2章(接口默认方法) Java8新特性第3章(Stream API) 之前由 ...

  5. Spring Boot项目中使用Swagger2

    Swagger2是一款restful接口文档在线生成和在线接口调试工具,Swagger2在Swagger1.x版本的基础上做了些改进,下面是在一个Spring Boot项目中引入Swagger2的简要 ...

  6. 优雅的在React项目中使用Redux

    概念 首先我们会用到哪些框架和工具呢? React UI框架 Redux 状态管理工具,与React没有任何关系,其他UI框架也可以使用Redux react-redux React插件,作用:方便在 ...

  7. vue 项目中实用的小技巧

    # 在Vue 项目中引入Bootstrap 有时在vue项目中会根据需求引入Bootstrap,而Bootstrap又是依赖于jQuery的,在使用npm按照时,可能会出现一系列的错误 1.安装jQu ...

  8. Web 开发中很实用的10个效果【附源码下载】

    在工作中,我们可能会用到各种交互效果.而这些效果在平常翻看文章的时候碰到很多,但是一时半会又想不起来在哪,所以养成知识整理的习惯是很有必要的.这篇文章给大家推荐10个在 Web 开发中很有用的效果,记 ...

  9. WPF项目中所遇到的一些问题集

    1. 没有Timer控件 解决方案: 第一步:申明一个DispatcherTimer 类的变量, private DispatcherTimer timer; //定时控件 第二步:初始化这个类 ti ...

随机推荐

  1. 老板,来五道misc

    开个杂项坑 穿越时空的思念 音频隐写,audacity分离音道,摩斯密码一把锁 金三胖 是个gif,明显能感觉到里面藏有flag stegsolve逐帧分离太low了,直接用脚本一把梭 import ...

  2. 论文解读《Learning Deep CNN Denoiser Prior for Image Restoration》

    CVPR2017的一篇论文 Learning Deep CNN Denoiser Prior for Image Restoration: 一般的,image restoration(IR)任务旨在从 ...

  3. [分享] 通过修改CSS自定义chrome滚动条样式

    首先得说一句 我不懂CSS的写法之类的 这段CSS也是在网上找的 所以有更先进的需求的话 我肯定不能满足你们了 不好意思效果图在10楼有人上了 我这边不管怎么弄 上传图片都卡在96% 而且不翻wall ...

  4. Redis---00概述

    一.什么是Redis? 1.概念: 是一个由Salvatore Sanfilippo写的key-value存储系统.是一个典型的NoSQL数据库, 2.特点: ①:数据是存储在内存中的 ②:是一个ke ...

  5. 【Javac编译异常】javac编译提示jdk中的包找不到的问题error: package jdk.internal.org.objectweb.asm does not exist 和 error: cannot find symbol

    一.复现步骤 1)编写待编译的java类 package f_asm_and_javassist; import jdk.internal.org.objectweb.asm.*; import ja ...

  6. Oracle终极彻底卸载

    停止使用Oracle的服务 停用oracle服务,进入计算机管理,在服务中,找到oracle开头的所有服务,右击选择停止. 运行卸载Oracle数据库程序 一般情况运行Oracle自带的卸载程序,如使 ...

  7. linux添加自动清空缓存

    1. cleanCache.sh vim cleanCache.sh #!/bin/bash #每两小时清除一次缓存 echo "开始清除缓存" sync;sync;sync #写 ...

  8. SQLServer连接cache数据库

    开始文章之前首先要了解一下什么是Caché数据库. Caché数据库是美国Intersystems公司产品,后关系型数据库(Post Relational database)中的领头羊.Caché数据 ...

  9. 手写cli

    惠善一的博客:http://huishanyi.club/ 通过命令行工具,初始化团队项目,并生成团队规范代码,一键创建项目,一键生成代码,一键生成功能模块··· 解放双手,从 cli 开始, JSe ...

  10. 【故障公告】博客站点再次出现故障,最终回退 .NET 5.0 恢复正常

    自从博客系统升级 .NET 5.0 之后遇到的诡异故障(一.二.三.四),今天它又出现了,就在前天刚刚故障之后, 就在昨天 .NET 5.0 正式版刚刚发布之后,出现了. 今天晚上我们在 19:30 ...