从集合中取出某些属性组成新的集合的几种方法

从集合中取出某些属性组成新的集合的几种方法

比如我们有一个装有学生类的集合,我们想获得所有学生的姓名组成的一个新的集合

1,准备工作

为了进行测试,首先,我们需要定义一个实体类

package com.me;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

@Data
@AllArgsConstructor
@NoArgsConstructor
public class Student {

    private String name;
    private Integer age;

}

2,获取新集合的方法

2.1下面使用第一种方法获取,利用流的思想,用到了forEach方法
package com.me;
import org.junit.Test;
import java.util.ArrayList;

public class ListDemoOne {

    @Test
    public void test(){

        ArrayList<Student> list = new ArrayList<>();

        Student one = new Student("一", 1);
        Student two = new Student("二", 2);
        Student three = new Student("三", 3);

        list.add(one);
        list.add(two);
        list.add(three);

        ArrayList<String> nameList = new ArrayList<>();
        list.forEach(s -> nameList.add(s.getName()));

        System.out.println(nameList);
    }
}
2.2使用第二种方法获取,同样利用流的思想,不过这次使用的是map和collect方法
package com.me;
import org.junit.Test;
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

public class ListDemoTwo {

    @Test
    public void test(){

        ArrayList<Student> list = new ArrayList<>();

        Student one = new Student("一", 1);
        Student two = new Student("二", 2);
        Student three = new Student("三", 3);

        list.add(one);
        list.add(two);
        list.add(three);
        List<String> nameList = list.stream().map(Student::getName).collect(Collectors.toList());
        
        System.out.println(nameList);
    }
}
2.3使用第三种方法获取,这次用的是Spring提供的工具类CollectionUtils下的transform方法
package com.me;
import org.junit.Test;
import org.springframework.cglib.core.CollectionUtils;
import java.util.ArrayList;
import java.util.List;

public class ListDemoThree {

    @Test
    public void test(){

        ArrayList<Student> list = new ArrayList<>();

        Student one = new Student("一", 1);
        Student two = new Student("二", 2);
        Student three = new Student("三", 3);

        list.add(one);
        list.add(two);
        list.add(three);
        //这里的参数s是Object类型,需要进行强转才能调用getName方法
        List<String> nameList = CollectionUtils.transform(list, s -> ((Student) s).getName());
        
        System.out.println(nameList);
        }
}

3,总结

这三种方法都可以达到我们想要的结果,但是第二种和第三种方法省去了我们new新集合对象的过程,更为方便一些。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章