lambda函数式编程实践--第二篇

我实验了以后觉得stream来对集合操作非常之方便,也比较高大上,我打算以后写代码都如果能使用的话尽量使用,尽量适用新的开发方式,很简化代码,那么先大概说说一些使用的实例。

先添加list集合的数据用来测试

    public static List addData() {
        List list = new ArrayList();
        for (int i = 1; i <= 10; i++) {
            Map map = new HashMap();
            map.put("userid", i + "");
            map.put("username", "df" + i);
            map.put("age", 23 + i);
            list.add(map);
        }
        return list;
    }

 main方法进行调用操作

    public static void main(String[] args) {
        List list = addData();
        System.out.println(list);
        datafx(list);
    }

datafx方法里写入测试代码

1.查询list集合数据年龄为25岁以上的总数是多少

filter是过滤条件

  /**
         * 查询list数据年龄>25的总数有多少
         * stream() − 为集合创建串行流。
         * filter() - 用于通过设置的条件过滤出元素
         * */
        long count = list.stream().filter(map ->
                Integer.parseInt(map.get("age").toString()) > 25).count();
        System.out.println(count);

返回结果

 

2.求最大值最小值,返回map集合

/**
         * max和min,查询最大值,最小值
         * */
       Map MinMap = list.stream().min(Comparator.
                comparing(map -> Integer.parseInt(map.get("userid").toString()))).get();
       System.out.println(MinMap);
       Map maxMap = list.stream().max(Comparator.
                comparing(map -> Integer.parseInt(map.get("userid").toString()))).get();
       System.out.println(maxMap);

返回结果 

 

3.对list数据age求和,也可以求最大值,最小值,平均值,可以返回int ,double,long数据类型

  /**
         * 对list数据求和sum
         * 对list数据求最大值max
         * 对list数据求最小值min
         * */
        int countSum = list.stream().mapToInt(map -> Integer.parseInt(map.get("age").toString().toString())).sum();
        System.out.println("求和:" + countSum);
        OptionalLong maxvalue = list.stream().mapToLong(map -> Long.parseLong(map.get("age").toString().toString())).max();
        System.out.println("最大值:" + maxvalue);
        OptionalDouble Mindouble = list.stream().mapToDouble(map -> Double.parseDouble(map.get("age").toString())).min();
        System.out.println("最小值:" + Mindouble);

返回结果 

 

4.将字符串转换成字符串集合List(String)

 /**
         *  如果返回值是Stream,那么是惰性求值;
         *如果返回值是另一个值或者为空,那就是及早求值
         *将字符串转换成list<String> 字符串
         *及早求值操作
         * */
        List<String> collect = Stream.of("a", "b", "c", "d", "f").collect(Collectors.toList());
        System.out.println(collect);

返回结果

 5.将字符串转换成字符串集合List(String)并转换成大写,并用map方式

   /**
         * map可以将一种类型的值转换成另一种类型。
         * map 方法用于映射每个元素到对应的结果
         * */
        List<String> streamMap = Stream.of("a", "b", "c", "d", "f").map(String -> String.toUpperCase())
                .collect(Collectors.toList());
        System.out.println(streamMap);

返回结果

 

6.使用filter过滤出想要的数据并转换成集合数据

  /**
         * filter遍历并检查其中的元素时,可用filter
         * */
        List<String> filter = Stream.of("a", "b", "c", "d", "f").filter(value ->
                value.contains("d")).collect(Collectors.toList());
        System.out.println(filter);
        List ss = list.stream().filter(map -> map.get("userid").toString().equals("1")).
                collect(Collectors.toList());
        System.out.println(ss);

返回结果

7.reduce使用,下面的例子使用reduce求和,0表示起点,acc表示累加器,保存着当前累加结果(每一步都将stream中的元素累加至acc),element是当前元素。

 /**
         * reduce
         * reduce操作可以实现从一组值中生成一个值,
         * 在上述例子中用到的count、min、max方法事实上都是reduce操作。
         * */
        //下面的例子使用reduce求和,0表示起点,acc表示累加器,
        //保存着当前累加结果(每一步都将stream中的元素累加至acc),element是当前元素。
        Integer reduce = Stream.of(1, 2, 3).
                reduce(0, (acc, element) -> acc + element);
        System.out.println(reduce);

返回结果

8.limit使用,limit 方法用于获取指定数量的流

 /**
         * limit 方法用于获取指定数量的流
         * 以下代码片段使用 limit 方法打印出 10 条数据:
         * Stream 提供了新的方法 'forEach' 来迭代流中的每个数据
         * */
        Random random = new Random();
        random.ints().limit(10).forEach(System.out::println);

 返回结果

 9.sorted使用,sorted 方法用于对流进行排序

 /**
         * sorted 方法用于对流进行排序
         * 以下代码片段使用 sorted 方法对输出的 10 个随机数进行排序:
         * */
        Random randomSorted = new Random();
        randomSorted.ints().limit(10).sorted().forEach(System.out::println);
返回结果

以上就是所有的例子了。 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值