从集合中取出某些属性组成新的集合的几种方法
比如我们有一个装有学生类的集合,我们想获得所有学生的姓名组成的一个新的集合
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新集合对象的过程,更为方便一些。