Java基础(7)集合的一些常用操作(筛选)

Java基础 集合的一些常用操作(筛选)

前言

   通常我喜欢将集合分成两种来对待。一种是内置对象包装类作为元素的集合,另一种则是自定义对象作为元素的集合。(事实上在操作原理上没什么区别,但是具体到代码的话,写法可以有多种)。

集合的筛选

我们以list为例(set操作与list基本类似):

内置对象包装类的操作

List<String> arrayList = new ArrayList<>();
        arrayList.add("a");
        arrayList.add("b");
        arrayList.add("c");
        arrayList.add("a");

我们想做一个筛选的话,我们想得到一个不包含a的数组

List<String> fNewArrayList = new ArrayList<>();
        for (String item : arrayList) {// 当然你也可以用remove,但是那个还要修改元素指针
            if (!"a".equals(item)) {
                fNewArrayList.add(item);
            }
        }
    System.out.println("方法1 FNewArrayList输出结果:" + fNewArrayList);

Java8以后,我们有了其他的选择,下面是利用lambda和stream来做的筛选

List<String> lArrayList = arrayList.stream().filter(item -> !"a".equals(item)).collect(Collectors.toList());
        System.out.println("方法2 LArrayList输出结果:" + lArrayList);

结果是相同的,至于更喜欢哪种方法,就看诸君喜欢哪种了。
在这里插入图片描述

自定义对象的操作

如果是自定义对象集合,其实操作起来区别也不是很大。我们以一个简单地学生类来进行试验。

public class Student{
            private int id;
            private String name;
            private String score;
        public Student(){
            }//一个空的构造方法
        public Student(Map<String,String> stuInfoMap){
            this.id =Integer.valueOf(stuInfoMap.get("id"));
            this.name=stuInfoMap.get("name");
            this.score=stuInfoMap.get("score");
            }//带参数的构造方法
        public int getId() {
            return id;
        }
        public void setId(int id) {
            this.id = id;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public int getScore() {
            return score;
        }
        public void setScore(int score) {
            this.score = score;
        }
        
        }

简单地填充一组数据:

List<Student> stuList = new ArrayList<>();

        for (int i = 0; i <= 4; i++) {
            Map<String, String> stuInfo = new HashMap<>();
            stuInfo.put("id", "123" + i);
            stuInfo.put("name", "李三" + i);
            stuInfo.put("score", String.valueOf(i));
            Student stu = new Student(stuInfo);

            stuList.add(stu);
        }
        System.out.println(JSONObject.toJSONString(stuList));

打印结果:
在这里插入图片描述
筛选出分数小于3的学生:
首先是for循环:

List<Student> fStuList = new ArrayList<>();
//TODO 对FstuList判空操作
        for (Student item : stuList) {// 同理你也可以用remove,但是那个还要修改元素指针
            if (3 > item.getScore()) {
                fStuList.add(item);
            }
        }
        System.out.println("方法1 FstuList输出结果:" + JSONObject.toJSONString(fStuList));

打印结果:
在这里插入图片描述

然后我们再看看lambda写法:

// TODO 对stuList判空
        List<Student> lStuList = stuList.stream().filter(item -> 3 > item.getScore()).collect(Collectors.toList());
        System.out.println("方法1 LstuList输出结果:" + JSONObject.toJSONString(lStuList));

打印结果:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/moye666/article/details/94565481