zoukankan      html  css  js  c++  java
  • Stream替代for-编码五分钟-划水五小时

    Stream替代for-编码五分钟-划水五小时

     

        天空没有痕迹,风雨已在心中。

    背景:使用Stream 流式操作取代俄罗斯式套娃的for循环解放底层劳动密集型码畜的双手,使编码五分钟划水五小时,不再是梦!

     

    一、Stream替代for例子

    给定一个字符串元素列表,里面有数字型字符串、有字母型字符串,字符串里有大写、小写,字符串长度也有长有短;现在要通过代码完成一个功能:

    找出所有长度 >=5 的字符串、并且忽略大小写、去除重复字符串、然后按照字母排序、最后用“”连成一个字符串输出。

    使用for循环实现:

     1 package com.tjt.jvm;
     2 
     3 import java.util.Arrays;
     4 import java.util.List;
     5 import java.util.Set;
     6 import java.util.TreeSet;
     7 
     8 public class This4String {
     9 
    10     public static void main(String[] args) {
    11         List<String> list = Arrays.asList("5", "2", "courage", "love", "kindness", "0", "care",
    12                 "RESPECT", "courage", "99", "HONEST", "8");
    13         // 使用Set 的去重功能定义一个具备字母排序能力的容器
    14         Set<String> sortSet = new TreeSet<>(String::compareTo); // 按照字母排序
    15 
    16         // for循环完成元素去重、大小写转换和长度判断:for循环1
    17         for (int i = 0; i < list.size(); i++) {
    18             String str = list.get(i);
    19             if (!isNum(str) && str.length() >= 5) {
    20                 // 转小写
    21                 String lowerAlpha = str.toLowerCase();
    22                 sortSet.add(lowerAlpha);
    23             }
    24         }
    25 
    26         StringBuffer sb = new StringBuffer();
    27         // for循环完成连词成句:for循环1
    28         for (String temp : sortSet) {
    29             sb.append(temp);
    30             sb.append("❤");
    31         }
    32         String result = sb.substring(0, sb.length() - 1);
    33         System.out.println("result is: " + result);
    34 
    35     }
    36 
    37     /**
    38      * 判断输入字符串是字母还是数字
    39      *
    40      * @param str
    41      * @return if number return false
    42      */
    43     public static Boolean isNum(String str) {
    44         for (int i = 0; i < str.length(); i++) {
    45             if (!Character.isDigit(str.charAt(i))) {
    46                 return false;
    47             }
    48         }
    49         return true;
    50     }
    51 
    52 
    53 }
    View Code

    使用Stream 流实现:

     1 package com.tjt.jvm;
     2 
     3 import java.util.Arrays;
     4 import java.util.Comparator;
     5 import java.util.List;
     6 import java.util.stream.Collectors;
     7 import java.util.stream.Stream;
     8 
     9 public class This4For {
    10 
    11     public static void main(String[] args) {
    12         List<String> list = Arrays.asList("5", "2", "courage", "love", "kindness", "0", "care",
    13                 "RESPECT", "courage", "99", "HONEST", "8");
    14         Stream<String> stream = list.stream();  // list转Stream 流
    15         String result = stream.filter(i -> !isNum(i))   // 过滤得到字母类型
    16                 .filter(i -> i.length() >= 5)   // 过滤长度 >=5 的字符串
    17                 .map(i -> i.toLowerCase())  // 转小写
    18                 .distinct()  // 去重
    19                 .sorted(Comparator.naturalOrder())  // 字符串排序
    20                 .collect(Collectors.joining("❤"));  // 连接
    21         System.out.println(result);
    22 
    23     }
    24 
    25     /**
    26      * 判断输入字符串是字母还是数字
    27      *
    28      * @param str
    29      * @return
    30      */
    31     public static Boolean isNum(String str) {
    32         for (int i = 0; i < str.length(); i++) {
    33             if (!Character.isDigit(str.charAt(i))) {
    34                 return false;
    35             }
    36         }
    37         return true;
    38     }
    39 
    40 }

    最后在执行速度上也没什么擦别,简单测试了一哈~截图为证~74ms

    执行速度对比截图

     

                     天空没有痕迹

                    风雨已在心中

     

  • 相关阅读:
    Iterator迭代器与增强for循环
    java中的集合
    基本类型包装类、System类
    java之Calendar类
    java二维数组
    java学习之字符串缓冲区
    java学习之内部类、包与代码块
    DataGridView列增加单选按钮、输入框
    DataGridView加上默认的序号
    数据结构简介
  • 原文地址:https://www.cnblogs.com/taojietaoge/p/13166306.html
Copyright © 2011-2022 走看看