java8新特性:stream流中collect用法
java8新特性:stream流中collect用法
1.toList
List collectList = Stream.of(1, 2, 3, 4)
.collect(Collectors.toList());
System.out.println("collectList: " + collectList);
// 打印结果
// collectList: [1, 2, 3, 4]
2.toSet
Set collectSet = Stream.of(2, 3, 3, 3)
.collect(Collectors.toSet());
System.out.println("collectSet: " + collectSet);
// 打印结果
// collectSet: [2,3]
3.分组
//按照名字分组
System.out.println("按照名字分组");
System.out.println(
peopleList.stream().collect(Collectors.groupingBy(People::getName))
);
例子:(直接看打印语句即可,前面很多代码没有看的价值)
People实体类:
package com.index.collections;
/**
* @author index
* @date 2020/10/27
**/
public class People {
private int age;
private int gender;
private String name;
public People(int age, int gender, String name) {
this.age = age;
this.gender = gender;
this.name = name;
}
public People(){}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public int getGender() {
return gender;
}
public void setGender(int gender) {
this.gender = gender;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "People{" +
"age=" + age +
", gender=" + gender +
", name='" + name + '\'' +
'}';
}
}
测试collect:
package com.index.collections;
import org.junit.Test;
import java.util.*;
import java.util.stream.Collectors;
/**
* @author index
* @date 2020/10/27
**/
public class TestcollectingAndThen {
@Test
public void test(){
final int NUM = 14;
List peopleList = new ArrayList<>(NUM);
String[] names = {"小张", "小龙", "小牛", "小猪", "小黑", "小红", "小白"};
for (int i = 0; i < 5; i++) {
//添加5个19岁的随机性别和名字的小朋友
peopleList.add(new People(19, (int) (Math.random() * 2), names[(int) (Math.random() * names.length)]));
}
for (int i = 5; i < 8; i++) {
//添加3个31岁的随机性别和名字的小朋友
peopleList.add(new People(31, (int) (Math.random() * 2), names[(int) (Math.random() * names.length)]));
}
for (int i = 8; i < NUM; i++) {
//添加6个22岁的随机性别和名字的小朋友
peopleList.add(new People(22, (int) (Math.random() * 2), names[(int) (Math.random() * names.length)]));
}
//collectingAndThen先对stream里的元素进行collecting,之后再对结果进行操作,
// 下面的结果是一个map,对map计算元素数目
System.out.println("分组数目:");
Integer groupCount = peopleList.stream().collect(
Collectors.collectingAndThen(Collectors.groupingBy(People::getName), Map::size));
System.out.println(groupCount);
System.out.println("-------------------------------------");
//按照名字分组
System.out.println("按照名字分组");
System.out.println(
peopleList.stream().collect(Collectors.groupingBy(People::getName))
);
System.out.println("-------------------------------------");
//按照名字分组(分组的结果是一个map),并统计每一个分组(map中的每一个value)中的元素数目
System.out.println("统计每一个分组(map中的每一个value)中的元素数目");
System.out.println(
peopleList.stream().collect(Collectors.groupingBy(People::getName, Collectors.counting()))
);
System.out.println("-------------------------------------");
//按照名字分组(分组的结果是一个map),并取出每一组的最大值
System.out.println("取出每一组的最大值");
System.out.println(
peopleList.stream().collect(Collectors.groupingBy(People::getName, Collectors.maxBy(new Comparator() {
@Override
public int compare(People o1, People o2) {
return o1.getAge() - o2.getAge();
}
})))
);
}
}
输出结果:
java8新特性:stream流中collect用法相关教程
Java8:从永久代PermGen到元空间Metaspace
Java8:从永久代PermGen到元空间Metaspace 众所周知java8的新特性之一是完全删除了永久生成( PermGen )空间,自jdk7发布以来,Oracle就已经宣布了这一点。例如,自jdk7以来,内部字符串已经从 PermGen 空间中删除。jdk8版本完成了它的退役。本文将与大家分享
Python中GIL锁
Python中GIL锁 GIL并不是Python的特性,Python完全可以不依赖于GIL。 GIL(Global Interpreter Lock)译为 全局解释器锁 (这里的全局包括 多个CPU 下), 并不是 Python独有特性. GIL仅是Python官方解释器CPython引入的一个互斥锁(mutex)概念 (除它之外,还有PyPy
Scala编程开发
Scala编程开发 Scala编程 一、Scala简介 1、Scala特性 2、Scala源自Java 3、Scala的优势 二、Scala基础 1、Scala常量与变量 2、Scala数据类型 3、Scala数据类型层次结构 4、字符串插值 三、Scala条件控制 1、条件控制 2、循环控制 3、循环中断 四、Scala数据
Java8新特性四:Stream流
Java8新特性四:Stream流 说到Stream便容易想到I/O Stream,而实际上,谁规定“流”就一定是“IO流”呢?在Java 8中,得益于Lambda所带来的函数式编程,引入了一个全新的Stream概念,用于解决已有集合类库既有的弊端。 1.1 引言 传统集合的多步遍历代码几乎所
Angular10中的特性模板和根模板(AppModule)
Angular10中的特性模板和根模板(AppModule) 前提是安装了 Angular cli ,以下的大部分文件创建都是依赖于 cli 提供的指令 Angular 中的特性模板和根模板( AppModule ) 区别在于特性模板可以把应用划分,个人理解类似于组件化 特性模板创建的指令 ng g module
【HTML CSS】笔记5日 新增特性
【HTML CSS】笔记5日 新增特性 HTML5 的新增特性主要是针对于以前的不足,增加了一些新的标签、新的表单和新的表单属性等。 这些新的特性都有兼容性问题,基本是IE9+以上版本的浏览器才支持,如果不考虑兼容性问题,可以大量使用这些新特性。 新特性增加了很
jdk9新特性学习(一)
jdk9新特性学习(一) // jdk8 -- jdk9 jdk9中不再有jre文件夹,而是将jre中的文件放至根目录中 jdk8中JVM在运行时必须要加载rt.jar文件,使得java运行环境臃肿。 模块化根据不同模块加载程序运行需要的class,本质上是在package外再加一层module,通过模块管
反射、特性综合练习
反射、特性综合练习 题目: 1: 开发商 程序引用开发者dll文件,检索可用的滤波方法,并启动测试; 2: 开发商 提供带有接口方法的dll文件(SDK)以约束开发者的行为; 3: 开发者 提供包含滤波方法的dll文件; 新建 解决方案 ,创建 工程DllPublishFilter ,