JDK1.8常用语法

倖福魔咒の 提交于 2020-03-03 08:27:50

stream 部分用法https://mp.weixin.qq.com/s/yS61Bbvlj5eOfEGpJR4gQA

 

Max和Min

// 求对象某属性的最小值
Ab ab = list.stream().min(Comparator.comparing(Ab::getCount)).get();
// 直接求最小值
Integer integer = Stream.of(8, 2, 3).min(Comparator.comparing(Integer::intValue)).get();

Map(T -> R)

替换list中的某个值,将流中的每一个元素T映射为R(类似类型转换)

# map用法, 将 list中的值都减1
lists.stream().map(aa -> aa - 1).collect(Collectors.toList());
#至取出对象中的某个属性
asList(new Ae("张三"), new Ae("李四"), new Ae("高五")).stream().map(Ae::getName).forEach(System.out::println);

flatMap

将list合并。将流中的每一个元素 T 映射为一个流,再把每一个流连接成为一个流

Stream.of(int1, int2).flatMap(as -> as.stream()).collect(Collectors.toList());
asList("aaa bbb ccc").stream()
        .map(a -> a.split(" ")).flatMap(Arrays::stream).collect(Collectors.toList()).forEach(System.out::println);

filter

过滤

System.out.println("先过滤再统计个数" + lists.stream().filter(geg -> geg == 1).count());

reduce

求和, 第一个参数是起始数,可以为空,acc是上一轮acc和当前元素的和,element为当前元素。

#1
Integer sumInt = asList(1, 2, 5).stream().reduce(0, (acc, element) -> acc + element);
# 2
Integer aaa = asList(1, 2, 5).stream().reduce( (acc, element) -> acc + element).get();

sorted

从小到大
asList(1, 2, 5).stream().sorted().collect(Collectors.toList());
#从大到小
asList(1, 2, 5).stream().sorted(Comparator.reverseOrder()).collect(Collectors.toList());
#从大到小
asList(1, 5,2,4,8).stream().sorted((a, b) -> b -a).collect(Collectors.toList()).forEach(System.out ::println);
#从大到小
list.stream().sorted(Comparator.comparingInt(Person::getAge    )).collect(Collectors.toList());

limit

    返回前n个元素

skip

    去除前n个元素

anyMatch

    是否有元素匹配。 还有allMatch、noneMatch

boolean b = asList(1, 2, 4).stream().anyMatch(a -> a == 2);

findAny() 和 findFirst()

findAny():找到其中一个元素 (使用 stream() 时找到的是第一个元素;使用 parallelStream() 并行时找到的是其中一个元素)

findFirst():找到第一个元素

 

面试问过的例子

JDK1.8 中list<bean>转为 Map<id,name>

Map<Integer, String> appleMap = appleList.stream().collect(Collectors.toMap(Apple::getId, Apple::getName );

读取文件

List<String> strs = Files.lines(Paths.get(fileName), Charset.defaultCharset()).collect(Collectors.toList());
或者
List<String> lineLists = Files
        .lines(Paths.get(fileName), Charset.defaultCharset())
        .flatMap(line -> Arrays.stream(line.split(",")))
        .collect(Collectors.toList());

 

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!