【Java】Java8 JDK8 Stream 流 Lambda表达式 用法 整理
目录
介绍
用法
基础
生成流
Collect用法
List 转 Map
介绍
Java 8 API添加了一个新的抽象称为流Stream,可以让你以一种声明的方式处理数据。
Stream 使用一种类似用 SQL 语句从数据库查询数据的直观方式来提供一种对 Java 集合运算和表达的高阶抽象。
Stream API可以极大提高Java程序员的生产力,让程序员写出高效率、干净、简洁的代码。
这种风格将要处理的元素集合看作一种流, 流在管道中传输, 并且可以在管道的节点上进行处理, 比如筛选, 排序,聚合等。
元素流在管道中经过中间操作(intermediate operation)的处理,最后由最终操作(terminal operation)得到前面处理的结果。
用法
基础
生成流
在 Java 8 中, 集合接口有两个方法来生成流:
- stream() − 为集合创建串行流。
- parallelStream() − 为集合创建并行流。
Collect用法
List 转 Map
@Test
public void listToMap(){
List<Map> list = new ArrayList<>();
list.add( MapUtil.of(new String[][]{
{"id", "1"},
{"name", "张三"},
}));
list.add( MapUtil.of(new String[][]{
{"id", "2"},
{"name", "李四"},
}));
list.add( MapUtil.of(new String[][]{
{"id", "3"},
{"name", "王五"},
}));
Map<Object, Map> id = list.stream().collect(Collectors.toMap(k -> k.get("id"), obj -> obj));
System.out.println(JSONUtil.parseObj(id).toStringPretty());
}
list 类型转换
stream().map(u -> BeanUtil.toBean(u, NewUser.class)).collect(Collectors.toList());
列表去重list去重
//通过姓名跟手机号去重
List<User> users= userList.stream().collect(Collectors
.collectingAndThen(Collectors.toCollection(() -> new TreeSet<>(Comparator
.comparing(o -> o.userName() + ";" + o.phone()))), ArrayList::new));
通过hashSet去重(如将classNames去重):该种去重是bean完全相同的时候算重复数据
List<String> classNameList = new ArrayList(new HashSet(classNames));