JDK 1.8新特性stream()

JDK 1.8新特性stream()

 

1:Map.forEach 遍历

 

// 创建一个Map

Map infoMap = new HashMap<>();

infoMap.put("name", "Zebe");

infoMap.put("site", "www.zebe.me");

infoMap.put("email", "[email protected]");

// 传统的Map迭代方式

for (Map.Entry entry : infoMap.entrySet()) {

System.out.println(entry.getKey() + ":" + entry.getValue());

}

// JDK8的迭代方式

// key/value:变量名

infoMap.forEach((key, value) -> {

System.out.println(key + ":" + value);

});

 

2:stream 比较

 

//学生类

public class Student{

//编号

private String id;

//姓名

private String name;

//年龄

private String age;

}

 

 

public class Test{

public static void main(String args[]) {

//5个学生对象

Student studentOne = new Student("1","张三","99");

Student studentTwo = new Student("2","张三","99");

Student studentThree = new Student("3","李四","99");

Student studentFour = new Student("4","王五","99");

Student studentFive = new Student("5","赵六","99");

 

//学生集合

List list = new ArrayList<>();

list.add(studentOne);

list.add(studentTwo);

list.add(studentThree);

list.add(studentFour);

list.add(studentFive);

//allMatch:判断条件里的元素,所有的都是,返回true

//比较是否list集合中所有学生的年龄都是99岁,如果全部都是99岁返回true

//student:一个Student变量名,自己命名

boolean resultOne = list.stream().allMatch(student -> student.getAge().equals("99"));

​​​​​​​//anyMatch:判断的条件里,任意一个元素成功,返回true

//比较list集合中所有学生姓名是否有一个名叫张三的,如果有返回true

boolean resultTwo = list.stream().anyMatch(student -> student.getName().equals("张三"));

 

//noneMatch:判断条件里的元素,所有的都不是,返回true

//比较list集合中所有学生ID是否都不是1,如果都不是返回true

boolean resultThree = list.stream().noneMatch(student -> student.getId().equals("1"));

}

}

3:stream collect

 

import java.util.ArrayList;

import java.util.IntSummaryStatistics;

import java.util.List;

import java.util.Map;

import java.util.Optional;

import java.util.Set;

import java.util.function.Function;

import java.util.stream.Collectors;

 

import org.junit.Test;

 

public class TestJava8 {

public static List list = new ArrayList<>();

static {

list.add(new Emp("上海", "小名", 17));

list.add(new Emp("北京", "小红", 18));

list.add(new Emp("深圳", "小蓝", 19));

list.add(new Emp("广州", "小灰", 20));

list.add(new Emp("杭州", "小黄", 21));

list.add(new Emp("贵阳", "小白", 22));

}

 

@Test

public void test1() {

// 将list集合中的所有name转成list

List names = list.stream().map(emp -> emp.getName()).collect(Collectors.toList());

// 转list集合中的所有name转成set

Set address = list.stream().map(emp -> emp.getName()).collect(Collectors.toSet());

// 转map,需要指定key和value,Function.identity()表示当前的Emp对象本身

Map map = list.stream().collect(Collectors.toMap(Emp::getName, Function.identity()));

// 计算元素中的个数

Long count = list.stream().collect(Collectors.counting());

// 数据求和 summingInt summingLong,summingDouble

Integer sumAges = list.stream().collect(Collectors.summingInt(Emp::getAge));

// 平均值 averagingInt,averagingDouble,averagingLong

Double aveAges = list.stream().collect(Collectors.averagingInt(Emp::getAge));

 

// 综合处理的,求最大值,最小值,平均值,求和操作

// summarizingInt,summarizingLong,summarizingDouble

IntSummaryStatistics intSummary = list.stream().collect(Collectors.summarizingInt(Emp::getAge));

System.out.println(intSummary.getAverage());// 19.5

System.out.println(intSummary.getMax());// 22

System.out.println(intSummary.getMin());// 17

System.out.println(intSummary.getSum());// 117

 

// 连接字符串,当然也可以使用重载的方法,加上一些前缀,后缀和中间分隔符

String strEmp = list.stream().map(emp -> emp.getName()).collect(Collectors.joining());

String strEmp1 = list.stream().map(emp -> emp.getName()).collect(Collectors.joining("-中间的分隔符-"));

String strEmp2 = list.stream().map(emp -> emp.getName()).collect(Collectors.joining("-中间的分隔符-", "前缀*", "&后缀"));

System.out.println(strEmp);// 小名小红小蓝小灰小黄小白

// 小名-中间的分隔符-小红-中间的分隔符-小蓝-中间的分隔符-小灰-中间的分隔符-小黄-中间的分隔符-小白

System.out.println(strEmp1);

// 前缀*小名-中间的分隔符-小红-中间的分隔符-小蓝-中间的分隔符-小灰-中间的分隔符-小黄-中间的分隔符-小白&后缀

System.out.println(strEmp2);

// maxBy 按照比较器中的比较结果刷选 最大值

Optional maxAge = list.stream().map(emp -> emp.getAge()).collect(Collectors.maxBy(Integer::max));

// 最小值

Optional minAge = list.stream().map(emp -> emp.getAge()).collect(Collectors.minBy(Integer::min));

// 归约操作

list.stream().map(emp -> emp.getAge()).collect(Collectors.reducing((x, y) -> x + y));

list.stream().map(emp -> emp.getAge()).collect(Collectors.reducing(0, (x, y) -> x + y));

// 分操作 groupingBy 根据地址,把原list进行分组

Map> mapGroup = list.stream().collect(Collectors.groupingBy(Emp::getAddress));

// partitioningBy 分区操作 需要根据类型指定判断分区

Map> partitioningMap = list.stream().map(emp -> emp.getAge())

.collect(Collectors.partitioningBy(emp -> emp > 20));

 

}

static class Emp {

private String address;

 

private String name;

 

private Integer age;

}

 

你可能感兴趣的:(JDK 1.8新特性stream())