java8 stream使用笔记、静态方法引用等
文章目录创建stream的方法stream的返回值多少种分别对应哪种方法map转化为listlist对象获取idListlist对象获取idListlist对象获取idList(对象是object时根据key获取)list转map主键重复报错函数reducestream的返回值有几种返回值 Stream # 不言而喻可以继续链式操作返回值 Collector # 很常用例如返回list或map返回值 long # count返回值 boolean返回值Optional # 返回任意一个对象返回值T # 返回一个对象如reduce方法返回值void # forEach等返回值IntStream返回值LongStream返回值DoubleStreamstream方法分类 中间方法、终止方法 todo 列表map()和Collectors.toMap()有什么区别?Collectors.toMap()方法有几个参数?作用是什么?支持并行处理吗?静态方法引用其他findAny()返回值为什么是optional### Collector? super T, A, R collector 这3个泛型是什么意思java7中可以使用java8语法吗?stream元素之间的转换对象到对象(居然还可以这么用)报错 Non-static method cannot be referenced from a static contextstream是java8主要特性之一很有用知识点也很多。创建stream的方法方法太多了。stream的返回值多少种分别对应哪种方法map转化为listmap转listDatapublicclassAccount{privateStringusername;privateIntegermoney;publicAccount(){}publicAccount(Stringusername,Integermoney){this.usernameusername;this.moneymoney;}publicstaticvoidmain(String[]args){HashMapString,IntegermapnewHashMap();map.put(mayun,2000);map.put(mahuateng,1200);map.put(liuqiangdong,700);ListAccountcollectmap.entrySet().stream().map(en-newAccount(en.getKey(),en.getValue())).collect(Collectors.toList());collect.stream().forEach(n-System.out.println(n));}}list对象获取idListlist对象获取idListListLongidListadjustMinusList.stream().map(User::getId).filter(Objects::nonNull)// 过滤掉空元素防止后续出现异常.distinct().collect(Collectors.toList());list对象获取idList(对象是object时根据key获取)ListLongidListadjustMinusList.stream().map(m-CommonUtil.getMapLongValue(m,id,null)).filter(Objects::nonNull).distinct().collect(Collectors.toList());list转map主键重复报错报错写法 list.stream().collect(Collectors.toMap(User::getId,Function.identity());不报错写法 list.stream().collect(Collectors.toMap(User::getId,Function.identity(),(v1,v2)-v2);解决方案也比较简单利用toMap()的重载方法即可。(v1,v2)-v2 表示 如果v1和v2相同按照v2的值即后面的覆盖前面的。函数reduce中文释义减少简化。 在stream中用于将流中的元素合并为一个单一结果。stream的返回值有几种为什么要整理这个呢多次一举吗?当然不是多此一举是因为对stream的链式操作以及什么时候可以继续什么时候终止弄不太清楚那么从返回值入手就很好理解。例如返回值是Stream当然可以继续流式操作。返回值是int(如count方法)那当然不能继续流式操作了。返回值 Stream # 不言而喻可以继续链式操作返回值 Collector # 很常用例如返回list或map返回值 long # count返回值 boolean返回值Optional # 返回任意一个对象返回值T # 返回一个对象如reduce方法返回值void # forEach等返回值IntStream返回值LongStream返回值DoubleStreamstream方法分类 中间方法、终止方法 todo 列表map()和Collectors.toMap()有什么区别?有时这两个方法功能类似例如都可以对对象进行处理。map() 是中间方法还是返回一个流那么还可以继续map。Collectors.toMap() 是终止方法返回的是一个map。Collectors.toMap()方法有几个参数?作用是什么?2-4个参数。Function? super T, ? extends K keyMapper, # 定义key的函数Function? super T, ? extends U valueMapper, # 定时value的函数BinaryOperatormergeFunction, # 解决当流中多个元素映射到相同键key时的冲突问题保留老值还是新值。Supplier mapSupplier # 生成一个新的mapCollectors.toList()和Collectors.toSet()只有一种方法签名而且都没有参数。支持并行处理吗?支持使用parallel()方法即可。ListIntegerlistArrays.asList(1,2,3,4,5);list.stream().parallel().forEach(System.out::println);// 乱序list.stream().parallel().forEachOrdered(System.out::println);// 顺序静态方法引用属于java8新特性不属于stream也写在这里吧。静态方法用::两个冒号来表示。publicstaticvoidmain(String[]args){ListIntegerlistArrays.asList(1,2,3,4,5);list.stream().forEach(out::println);// 使用这句的话需要在类前面静态导入 import static java.lang.System.out;list.stream().forEach(System.out::println);list.stream().forEach(DateUtils::customprint);}publicstaticvoidcustomprint(Integers){System.out.println(s);}其他findAny()返回值为什么是optional### Collector? super T, A, R collector 这3个泛型是什么意思这一块有点看不懂哪位大神帮解读下。。。java7中可以使用java8语法吗?java7中当然不能使用java8语法了。 这话没毛病但是如果客户只要java7环境要求使用java8语法有办法实现吗?还真有引入谷歌的guava依赖。(当然guava是很强的核心类库功能远不止只支持java8)dependencygroupIdcom.google.guava/groupIdartifactIdguava/artifactId/dependency提这个主要就是扩展下思路。stream元素之间的转换对象到对象(居然还可以这么用)记录这个主要遇到个问题map中引用属性用双冒号(这个双冒号标准的名称是?)即可。如Person::getName()那么如果value是原对象呢?其实很简单。Person-Person表示引用原对象。报错 Non-static method cannot be referenced from a static context报错信息Non-static method cannot be referenced from a static context这个报错一般是用静态方法::时主要有两种可能1、类名没有写对。# 例如mybatisplus wrapper定义的类A但是静态类前面却写成类B2、方法名没有写对。