java8 集合神操作
public class StreamUtils {
private static final List<Integer> listInteger = Lists.newArrayList(1, 2, 3, 4, 5, 6, 3, 5, 1, 4, 2, 8, 9);
private static final List<Integer> arrayList = Lists.newArrayList(1, 25, 6, 9, 22, 44);
public static void main(String[] args) {
///取%2的数
List<Integer> collect = listInteger.stream().filter(i -> i % 2 == 0).collect(Collectors.toList());
System.out.println(collect);
///去重
List<Integer> collect1 = listInteger.stream().distinct().collect(Collectors.toList());
System.out.println(collect1);
///跳过前面3个元素
List<Integer> collect2 = listInteger.stream().skip(3).collect(Collectors.toList());
System.out.println(collect2);
///取前面3个元素
List<Integer> collect3 = listInteger.stream().limit(3).collect(Collectors.toList());
System.out.println(collect3);
///打印dish getName集合
List<String> collect4 = list.stream().map(Dish::getName).collect(Collectors.toList());
System.out.println(collect4);
String[] helloWord = {"hellow", "word"};
///{h,e,l,l,o,w},{w,o,r,d}
Stream<String[]> stream = Arrays.stream(helloWord).map(s -> s.split(""));
///h,e,l,l,o,w,w,o,r,d || flatMap 扁平化操作接受stream
Stream<String> stringStream = stream.flatMap(Arrays::stream);
///去重
stringStream.distinct().forEach(System.out::println);
//allMatch 所有的元素的满足条件
System.out.println(arrayList.stream().allMatch(i -> i > 50));
///anyMatch 当元素数组中有一个元素满足就返回true
System.out.println(arrayList.stream().anyMatch(i -> i > 40));
///noneMatch 没有一个元素满足的情况下返回true
System.out.println(arrayList.stream().noneMatch(i -> i < 0));
///findAny随机获取一个元素
Optional<Integer> any = arrayList.stream().filter(i -> i > 2).findAny();
System.out.println(any.get());
///Options 中的orElse 如果返回结果是null使用orElse可以设置默认值,返回-1
Integer integer = arrayList.stream().filter(i -> i > 66).findAny().orElse(-1);
System.out.println(integer);
///isPresent元素是否存在,ifPresent 元素存在需要做什么事情
Optional<Integer> first = arrayList.stream().filter(i -> i > 10).findFirst();
System.out.println("optional元素是否存在:"+first.isPresent());
first.ifPresent(System.out::println);
//reduce 聚合函数 将数组中的元素累加 0设置默认值初始值
Integer sum = arrayList.stream().reduce(0, (x, y) -> x + y);
System.out.println(sum);
///打印数组中累加的值
arrayList.stream().reduce((x,y)->x+y).ifPresent(System.out::println);
///获取数组中的最大值
System.out.println(arrayList.stream().reduce(Integer::max).get());
///获取数组最小值
System.out.println(arrayList.stream().reduce(Integer::min).get());
///累加
arrayList.stream().reduce(Integer::sum).ifPresent(System.out::println);
73
///根据name分组
Map<String, List<UserInfo>> collect = listUser.stream().collect(Collectors.groupingBy(UserInfo::getName));
System.out.println(JSON.toJSONString(collect)); ///Collectors.averagingDouble 取出平均值
Optional.ofNullable(list.stream().collect(Collectors.averagingDouble(Dish::getOalories)))
.ifPresent(System.out::println); ///collectingAndThen 对结果进行处理
Optional.ofNullable(list.stream().collect(Collectors.collectingAndThen(Collectors.averagingDouble(Dish::getOalories),(a->"平均值:"+a))))
.ifPresent(System.out::println); List<Dish> dishList = list.stream().filter(d -> d.getType().equals(Dish.Type.OTHER)).collect(Collectors.collectingAndThen(Collectors.toList(), Collections::unmodifiableList)); // dishList.add(new Dish("salmon", false, 550, Dish.Type.FISH)); System.out.println(JSON.toJSONString(dishList)); ///打印集合个数
Optional.ofNullable(list.stream().collect(Collectors.counting())).ifPresent(System.out::println);
///{OTHER=4, MEAT=3, FISH=2} 分组之后统计分组的个数
Optional.ofNullable(list.stream().collect(Collectors.groupingBy(Dish::getType,Collectors.counting()))).ifPresent(System.out::println);
///分组之后 求出平均值 并且返回的TreeMap
Optional.ofNullable(list.stream().collect(Collectors.groupingBy(Dish::getType, TreeMap::new,Collectors.averagingDouble(Dish::getOalories)))).ifPresent(System.out::println);
///DoubleSummaryStatistics 统计集合的值 DoubleSummaryStatistics{count=9, sum=4200.000000, min=120.000000, average=466.666667, max=800.000000}
DoubleSummaryStatistics summaryStatistics = list.stream().collect(Collectors.summarizingDouble(Dish::getOalories));
System.out.println(summaryStatistics.toString()); ///concurrentMap 和 Map使用一样
ConcurrentMap<Dish.Type, List<Dish>> collect1 = list.stream().collect(Collectors.groupingByConcurrent(Dish::getType));
System.out.println(collect1);
///转换为skipListMap
ConcurrentSkipListMap<Dish.Type, Double> collect2 = list.stream().collect(Collectors.groupingByConcurrent(Dish::getType, ConcurrentSkipListMap::new, Collectors.averagingDouble(Dish::getOalories))); String collect3 = list.stream().collect(Collectors.mapping(Dish::getName, Collectors.joining(",", "[", "]"))); System.out.println(collect3);
}
}
java8 集合神操作的更多相关文章
- Java8 集合相关操作
// java8 集合快速转成string List<String> cities; String citiesCommaSeparated = String.join(",&q ...
- json和字符串/数组/集合的互相转换の神操作总结
一:前端字符串转JSON的4种方式 1,eval方式解析,恐怕这是最早的解析方式了. function strToJson(str){ var json = eval('(' + str + ')') ...
- 【java多线程】java8的流操作api和fork/join框架
原文:https://blog.csdn.net/u011001723/article/details/52794455/ 一.测试一个案例,说明java8的流操作是并行操作 1.代码 package ...
- Java8集合框架——基本知识点
前言 Java的基础集合框架的内容并不复杂,List.Map.Set 中大概10个常见的集合类,建议多看几遍源码(Java8),然后回过头再来看看这些各路博客总结的知识点,会有一种豁然开朗的感觉. 本 ...
- Java8集合框架——LinkedList源码分析
java.util.LinkedList 本文的主要目录结构: 一.LinkedList的特点及与ArrayList的比较 二.LinkedList的内部实现 三.LinkedList添加元素 四.L ...
- paip.数组以及集合的操作uapi java php python总结..
paip.数组以及集合的操作uapi 作者Attilax 艾龙, EMAIL:1466519819@qq.com 来源:attilax的专栏 地址:http://blog.csdn.net/att ...
- IT第二十一天 - Collections、ArrayList集合、LinkedList集合、Set集合、HashMap集合、集合的操作注意【修20130828】
NIIT第二十一天 上午 集合 1. 集合Collection存储数据的形式是单个存储的,而Map存储是按照键值对来存储的,键值对:即键+值同时存储的,类似align="center&quo ...
- java集合框架工具类Collections,集合的操作
1 import java.util.*; public class asList { public static void main(String args[]) { // int arr[] = ...
- java集合的操作(set,Iterator)
集合的操作 Iterator.Collection.Set和HashSet关系 Iterator<——Collection<——Set<——HashSet Iterator中的方法: ...
随机推荐
- [WPF]为旧版本的应用添加触控支持
之前做WPF开发时曾经遇到这样一个需求:为一个基于 .NET Framework 3.5开发的老旧WPF程序添加触控支持,以便于大屏触控展示. 接手之后发现这是一个大坑. 项目最初的时候完全没考虑过软 ...
- 由VC2010与VC2017数据结构差异造成的程序错误
内容:VC2010和VC2017的标准库中,string(或wstring)的数据结构和操作有所不同,所以在将这两种数据作为参数在两个系统产生的函数中传递时会出现乱码(string和wstring在2 ...
- JVM活学活用——类加载机制
类的实例化过程 有父类的情况 1. 加载父类静态 1.1 为静态属性分配存储空间并赋初始值 1.2 执行静态初始化块和静态初始化语句(从上至下) 2. 加载子类静态 2.1 为静态 ...
- [leetcode.com]算法题目 - Symmetric Tree
Given a binary tree, check whether it is a mirror of itself (ie, symmetric around its center). For e ...
- select2插件使用小记
插件官网:https://select2.github.io/examples.html 页面引入: // 页面顶部 <link rel="stylesheet" type= ...
- MyBatis全局配置文件标签详解
一.全局配置文件结构 configuration 配置 properties 属性:可以加载properties配置文件的信息 settings 设置:可以设置mybatis的全局属性 typeAli ...
- 机器学习与Tensorflow(2)——神经网络及Tensorflow实现
神经网络算法以及Tensorflow的实现 一.多层向前神经网络(Multilayer Feed-Forward Neural Network) 多层向前神经网络由三部分组成:输入层(input la ...
- python3 调用 salt-api
使用python3调用 salt-api 在项目中我们不能使用命令行的模式去调用salt-api,所以我们可以写一个基于salt-api的类,方便项目代码的调用.在这里特别附上两种方式实现的pytho ...
- 【sping揭秘】7、国际化信息支持
Spring提供messagesource接口,来进行国际化事务处理 Applicationcontext会优先找一个名为messageSouce的messageSource接口实现bean,如果找不 ...
- [Umbraco] Data Type之Render control
继续探讨Data Type.如果你创建过Data Type,你就会知道创建一个新的Data Type都需要指定一个Render control,这有点类似开始C#时用到的继承. 那么如何创建我们自己的 ...