美文网首页
JDK8切割使用,分割的字符串

JDK8切割使用,分割的字符串

作者: 小胖学编程 | 来源:发表于2020-05-12 18:22 被阅读0次

场景:在统计时,使用group by分组函数时。若想获取除分组参数外的其他数据,推荐在select上使用GROUP_CONCAT(id)函数。这样得到的数据就使用,分割。

需求:将集合中对象的使用,分割的字段转换成一个新的集合。

方案1:使用flatMap

public class TestArray {

    /**
     * 方案1,使用flatMap(相当双层for循环)进行数据的汇总
     */
    public static void main(String[] args) {

        List<Student> students = data1();
        //第一层for循环遍历对象。
        List<String> sports = students.stream().
                filter(s -> s.getSports() != null).
                //第二层for循环获取到所有的元素流。
                flatMap(s -> Arrays.stream(s.getSports().split(","))).
                //二层循环结束后开始汇总数据
                collect(Collectors.toList());
        System.out.println(sports);
    }
    

    public static List<Student> data1() {
        return new ArrayList<>();
    }

    public static List<Student> data2() {
        List<Student> stus = new ArrayList<>();
        Student s1 = new Student();
        s1.setName("李白");
        s1.setSports("足球,篮球");

        Student s2 = new Student();

        stus.add(s1);
        stus.add(s2);

        return stus;
    }
    
    @Data
    public static class Student {

        private String name;
        /**
         * 运动类型。使用,进行分割。
         * eg: 足球,篮球
         */
        private String sports;
    }
}

2. 方案2:使用Collectors.joining()

public class TestArray {
    
    public static void main(String[] args) {

        List<Student> students = data2();
        //将列表中所有的该字段在使用,进行连接
        String strs = students.stream().
                map(Student::getSports).
                filter(StringUtils::isNotBlank).
                collect(Collectors.joining());
        //然后在进行统一切分
        List<String> collect = Arrays.stream(strs.split(",")).collect(Collectors.toList());
        System.out.println(collect);
    }


    public static List<Student> data1() {
        return new ArrayList<>();
    }

    public static List<Student> data2() {
        List<Student> stus = new ArrayList<>();
        Student s1 = new Student();
        s1.setName("李白");
        s1.setSports("足球,篮球");

        Student s2 = new Student();
        s2.setSports("");

        stus.add(s1);
        stus.add(s2);

        return stus;
    }

    @Data
    public static class Student {

        private String name;
        /**
         * 运动类型。使用,进行分割。
         * eg: 足球,篮球
         */
        private String sports;
    }
}

3. 注意点:对空串或者null进行切割

对空串进行分割,得到的集合大小为1。

    public static void main(String[] args) {
        String str="";
        List<String> collect = Arrays.stream(str.split(";")).collect(Collectors.toList());
        System.out.println("空串的大小:"+collect.size());
        String str1=null;
        List<String> collect1 = Arrays.stream(str1.split(";")).collect(Collectors.toList());
        System.out.println("null的大小:"+collect1.size());
    }
空串的大小:1
Exception in thread "main" java.lang.NullPointerException

所以使用Arrays.stream(str.split(";")).collect(Collectors.toList())时,需要对字符串进行校验~

相关文章

  • JDK8切割使用,分割的字符串

    场景:在统计时,使用group by分组函数时。若想获取除分组参数外的其他数据,推荐在select上使用GROUP...

  • 正则 表单验证

    正则 字符串替换 使用replace(regex,‘’) 括号里写以什么分割 字符串以叠词切割 运用正则分组() ...

  • 【2017-08-22】字符串及文本的处理(一)

    字符串的分割与匹配 字符串分割如何根据指定的分割符将一个字符串切割str.split()仅用于简单的分割符处理,只...

  • go语言中一些字符串操作介绍

    按单个/多个字符分割字符串 按指定内容切割字符串 str:="helloworld"res0:=strings.S...

  • 复习数组

    1 split(' ') 切割符把字符串分割为数组 引号间用空格 2 join 拼...

  • java中常用正则表达式

    用正则表达式切割字符串;将,,和空格还有\隔开的字符分割 包含, ,和空字符串 包含() () 和空格 包含,,...

  • 数组API

    1 split(' ') 切割符把字符串分割为数组 引号间用空格 2 join 拼接符 3 reverse 翻转 ...

  • JS中易混淆方法:split,splice,slice

    Split Split是切割字符串的一种方法,该方法主要用于把一个字符串分割成字符串数组。 用于字符串对象。 s....

  • NSString去掉空串

    不说废话, 直接上代码 -- 1. 去掉首尾空白字符串 打印结果 : -- 2. 以空格为分割点, 将字符串切割成...

  • 使用多个分隔符分隔字符串

    python 多分隔符分隔字符串 python内建split方法不能使用多个分割符来分割字符串,可以使用re模块的...

网友评论

      本文标题:JDK8切割使用,分割的字符串

      本文链接:https://www.haomeiwen.com/subject/lpnbnhtx.html