java8 lambda常见用法总结

个人总结的一些关于java8 lambda stream相关的操作和写法,可以直接复制粘贴,亲自体验功能。

package test;

import lombok.Data;
import lombok.ToString;
import lombok.experimental.Accessors;

import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;

@ToString
@Data
@Accessors(chain = true)
public class people {
    private String name;
    private int age;
    private String sex;

    private static List<people> getPeopleList() {
        people p1 = new people().setName("张三").setAge(21).setSex("女");
        people p2 = new people().setName("李四").setAge(43).setSex("男");
        people p3 = new people().setName("赵五").setAge(35).setSex("男");
        people p4 = new people().setName("王六").setAge(15).setSex("女");
        ArrayList<people> list = new ArrayList<>();
        list.add(p1);
        list.add(p2);
        list.add(p3);
        list.add(p4);
        return list;
    }

    //遍历数组
    public static void foreachTest() {
        List<people> list = getPeopleList();
        list.forEach(e -> e.age += 3);
        //System.out::println双冒号表示对该变量的对象执行此方法,可以写成list.forEach(e->System.out.println(e));
        list.forEach(System.out::println);
        HashMap<String, String> map = new HashMap<>();
        map.put("1", "hello");
        map.put("2", "world");
        map.forEach((k, v) -> System.out.println(k + "--" + v));
        
    }

    //过滤筛选,经过此方法会获得比原数组size小的数组
    public static void filterTest() {
        List<people> list = getPeopleList();
        list.stream().filter(e -> e.getSex().equals("男")).forEach(System.out::println);
    }

    //获取固定数量的前n个元素
    public static void limitTest() {
        List<people> list = getPeopleList();
        list.stream().limit(2).forEach(System.out::println);
    }

    //按照某个number字段进行排序,默认从小到大
    public static void sortedTest() {
        List<people> list = getPeopleList();
        list.stream().sorted((e, f) -> (e.getAge() - f.getAge())).forEach(System.out::println);
    }

    //获取数组中某个number字段最大或者最小的元素
    public static void maxOrMinTest() {
        List<people> list = getPeopleList();
        String s = list.stream().max(Comparator.comparing(people::getAge)).get().toString();
        System.out.println(s);
    }

    //遍历数组中每一个元素并操作
    public static void mapTest() {
        List<people> list = getPeopleList();
        list.stream().map(e -> (e.setAge(e.getAge() + 3))).forEach(System.out::println);
    }

    //计总数,只能用于number类型的数组,如果是object类型的数组,可以使用94行的statisticsTest方法演示来计数。
    public static void reduceTest() {
        List<Integer> list = Arrays.asList(1, 2, 3, 4, 5);
        Integer sum = list.stream().reduce((s, d) -> (s += d)).get();
        System.out.println(sum);
    }

    //可以将数组转化为其他类型的数据
    public static void collectTest() {
        List<people> list = getPeopleList();
        List<people> collect = list.stream().map(e -> (e.setAge(e.getAge() + 3))).collect(Collectors.toList());
        collect.forEach(System.out::println);
        String s = collect.stream().map(people::getName).collect(Collectors.joining(","));
        System.out.println(s);

    }

    //number数据的分析
    public static void statisticsTest() {
        List<people> list = getPeopleList();
        IntSummaryStatistics intSummaryStatistics = list.stream().mapToInt(e -> e.getAge()).summaryStatistics();
        System.out.println("年龄最大:" + intSummaryStatistics.getMax());
        System.out.println("年龄最小:" + intSummaryStatistics.getMin());
        System.out.println("平均年龄:" + intSummaryStatistics.getAverage());
        System.out.println("年龄总和:" + intSummaryStatistics.getSum());
        System.out.println("个数:" + intSummaryStatistics.getCount());

    }

    //去重,删除重复的元素(不是比较hash地址,对象元素会比较每一个属性值是否一样)
    public static void distinctTest() {
        List<people> list = getPeopleList();
        list.add(new people());
        list.add(new people());
        Long count = list.stream().distinct().count();
        System.out.println(count);
    }

    //将多个同种集合合成一个集合
    public static void flatMapTest() {
        Stream<List<Integer>> inputStream = Stream.of(
                Arrays.asList(1),
                Arrays.asList(2, 3, 5),
                Arrays.asList(4, 6, 5)
        );
        List<Integer> list = inputStream.flatMap((childList) -> childList.stream()).collect(Collectors.toList());
        list.forEach(System.out::println);
    }

    //判断,可以对符合peek要求的元素进行额外的处理
    public static void peekTest() {
        List<people> list = getPeopleList();
        list.stream().peek(a -> {
            if (a.getSex().equals("男")) {
                a.setAge(a.getAge() + 3);
            }
        })
                .forEach(System.out::println)
        ;
    }


    //allMatch:是不是Stream中的所有元素都满足给定的匹配条件
    public static void allMatchTest() {
        List<people> list = getPeopleList();
        System.out.println(list.stream().allMatch(a -> a.getAge() >= 30));
    }

    // anyMatch:Stream中是否存在任何一个元素满足匹配条件
    public static void anyMatchTest() {
        List<Integer> list = Arrays.asList(1, 3, 2, 0);
        System.out.println(list.stream().anyMatch(a -> a > 100));
        System.out.println(list.stream().anyMatch(a -> a > 2));
    }

    //noneMatch:是不是Stream中的所有元素都不满足给定的匹配条件
    public static void noneMatchTest() {
        List<Integer> list = Arrays.asList(1, 3, 2, 0);
        System.out.println(list.stream().noneMatch(a -> a > 100));
        System.out.println(list.stream().noneMatch(a -> a > 2));
    }

    public static void main(String[] args) {
        // foreachTest();
        // filterTest();
        // limitTest();
        // sortedTest();
        // maxOrMinTest();
        // mapTest();
        // reduceTest();
        // collectTest();
        // statisticsTest();
        // distinctTest();
        // flatMapTest();
        // peekTest();
        // allMatchTest();
        // anyMatchTest();
        // noneMatchTest();
    }
}

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

却诚Salong

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值