java8中stream的map和flatmap的理解】的更多相关文章

转自https://blog.csdn.net/wynjauu/article/details/78741093 假如我们有这样一个需求给定单词列表["Hello","World"],你想要返回列表["H","e","l", "o","W","r","d"], 对于这样的需求,我们可能想到的第一个版本可能是这样子的: words…
https://blog.csdn.net/zlj1217/article/details/81611834 背景在最近的工作开发之中,慢慢习惯了很多Java8中的Stream的用法,很方便而且也可以并行的去执行这个流,这边去写一下昨天遇到的一个list转map的场景. list转map在Java8中stream的应用常用方式1.利用Collectors.toMap方法进行转换 public Map<Long, String> getIdNameMap(List<Account>…
Optional的map和flatMap Optional存在map和flatMap方法.map源码如下 public<U> Optional<U> map(Function<? super T, ? extends U> mapper) { Objects.requireNonNull(mapper); if (!isPresent()) return empty(); else { return Optional.ofNullable(mapper.apply(va…
假如我们有这样一个需求给定单词列表["Hello","World"],你想要返回列表["H","e","l", "o","W","r","d"],对于这样的需求,我们可能想到的第一个版本可能是这样子的: words.stream() .map(word -> word.split("")) .disti…
map方法 map的含义为映射.是指对于Stream中包含的每一个元素使用给定的转换函数进行转换. map传入的Lambda表达式必须是Function实例,参数可以为任意类型,而其返回值也是任性类型,javac会根据实际情景自行推断. flatMap方法 flatMap的含义为平铺映射.flatMap方法与map方法类似,都是将原Stream中的每一个元素通过转换函数转换.不同的是,flatMap是对结果进行平铺. flatMap传入的Lambda表达式必须是Function实例,参数可以为任…
Stream Pipelines 前面我们已经学会如何使用Stream API,用起来真的很爽,但简洁的方法下面似乎隐藏着无尽的秘密,如此强大的API是如何实现的呢?比如Pipeline是怎么执行的,每次方法调用都会导致一次迭代吗?自动并行又是怎么做到的,线程个数是多少?本节我们学习Stream流水线的原理,这是Stream实现的关键所在. 首先回顾一下容器执行Lambda表达式的方式,以ArrayList.forEach()方法为例,具体代码如下: // ArrayList.forEach()…
筛选重复的元素 Stream 接口支持 distinct 的方法, 它会返回一个元素(根据流所生成元素的 hashCode和equals方法实现)的流. 例如,以下代码会筛选出列表中所有的偶数,并确保没有 重复. List<Dish> dishes = Dish.menu.stream() .filter(Dish::isVegetarian) .collect(Collectors.toList()); 跳过指定数量的元素 Stream 支持 skip(n) 方法,返回一个扔掉了前n个元素的…
第一种: 取list中某2个字段作为Map的K,V public Map<Long, String> getIdNameMap(List<Account> accounts) { return accounts.stream().collect(Collectors.toMap(Account::getId, Account::getUsername)); } 第二种:将id和实体Bean做为K,V public Map<Long, Account> getIdAcco…
map: 用作类型转换 如把集合里面的字符串转为大写,或者一个对象的集合取几个字段转为新的对象集合filter: 过滤 符合条件的集合元素保存下来,不符合条件的去掉flatMap:合并集合,比如List<Album> Album里面有一LIst<Track> 对象,这个时候就能不通过循环的方式把 List<Album> 里的每一个元素的 trasks 对象组装成一个新的集合reduce: reduce可以做累加运算, .reduce(0, (a,b)-> a+b)…
数据结构和数据准备 @Data @AllArgsConstructor @NoArgsConstructor static class StreamItem { Integer id; String name; Boolean sex; } List<StreamItem> list = Lists.newArrayList(new StreamItem(1, "a", true), new StreamItem(2, "b", false), new…