欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

java8-Stream集合操作学习

程序员文章站 2022-10-25 09:35:04
一、Stream简介 1、Java 8引入了全新的Stream API。这里的Stream和I/O流不同,它更像具有Iterable的集合类,但行为和集合类又有所不同。 2、stream是对集合对象功能的增强,它专注于对集合对象进行各种非常便利、高效的聚合操作,或者大批量数据操作。 3、只要给出需要 ......

一、stream简介

1、java 8引入了全新的stream api。这里的stream和i/o流不同,它更像具有iterable的集合类,但行为和集合类又有所不同。

2、stream是对集合对象功能的增强,它专注于对集合对象进行各种非常便利、高效的聚合操作,或者大批量数据操作。

3、只要给出需要对其包含的元素执行什么操作,比如 “过滤掉长度大于 10 的字符串”、“获取每个字符串的首字母”等,stream 会隐式地在内部进行遍历,做出相应的数据转换。

二、stream的优势

1、函数式编程带来的好处,我认为主要是在于使得代码逻辑更加清晰,可读性增强,便于维护,也更加不容易出错。

2、使用stream对集合的一些操作,往往代码量只有传统的循环遍历的一半甚至更少。less code,less bug!

3、有逼格

三、示例数据源

public list<map<string,object>> list(){
map<string,object> map1=new hashmap<>();
map1.put("id","1");
map1.put("name","小张");
map1.put("age","10");
map1.put("sex","男");
map<string,object> map2=new hashmap<>();
map2.put("id","2");
map2.put("name","小李");
map2.put("age","15");
map2.put("sex","女");
map<string,object> map3=new hashmap<>();
map3.put("id","3");
map3.put("name","小王");
map3.put("age","30");
map3.put("sex","男");
list<map<string,object>> list=new arraylist<>();
list= arrays.aslist(map1,map2,map3);
return list;
}

四、fiter

fiter接受一个函数作为参数,该函数用lambda表达式表示。如性别为男,则会将所有性别为男的元素留下,余下的剔除。

java8-Stream集合操作学习

list<map<string,object>> list =new test().getlist();
system.out.println(list);
list<map<string,object>> list2= list.stream().filter(stu->
stu.get("sex").equals("男")).collect(tolist());
system.out.println(list2);

控制台输出:

java8-Stream集合操作学习

lanbda表达式中 ->右边返回boolean类型:true 则留下,false则剔除

 public static void main(string[] args) {

        list<map<string, object>> list = new test().getlist();
        system.out.println(list);
        list<map<string, object>> list2 = list.stream().filter(stu -> {
                    if (integer.parseint(stu.get("age").tostring()) > 20) {
                        return true;
                    } else {
                        return false;
                    }
                }
        ).collect(tolist());
        system.out.println(list2);
    }

输出:

java8-Stream集合操作学习

特别注意:这里fiter操作是创建了一个新的对象的,也就是说并不会改变原list,因此必须要接一下。

五、map

map是将list中的元素改变,比较常用,也很好用

java8-Stream集合操作学习

    public static void main(string[] args) {


        list<map<string, object>> list = new test().getlist();
        system.out.println(list);
        list.stream().map(stu->{
            stu.put("score",90);
            return stu;
                }
        ).collect(tolist());

        system.out.println(list1);
    }

输出:

java8-Stream集合操作学习

注意一点map方法,当返回的是原对象本身的时候,就不会创建新的list对象,也就是说原来的list会改变,正常用的时候也就不需要接了。

而如果返回的不是原对象的话,就会创建新list对象了,就需要接一下。这里也很好理解,如果这里不创建新对象的话,原来对象有泛型约束,就矛盾了啊。示例如下:

 public static void main(string[] args) {


        list<map<string, object>> list = new test().getlist();
        system.out.println(list);
        list<string> list1= list.stream().map(stu->{
                    return stu.get("name").tostring();
                }
        ).collect(tolist());

        system.out.println(list1);
    }

输出:

java8-Stream集合操作学习

 六、flatmap