// 创建一个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);
});
//学生类
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"));
}
}
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;
}