之前没有接触过stream流,所以在处理集合方面效率太低,代码写的也多,所以准备学习一下stream流来提高一下自己。
我对stream流的理解就是可以在很多地方省去for循环的步骤,会用以后也很方便,无非就是方法的调用。
首先创建一个实体类,也有getset方法,这里列出来的话太多了就省略掉了。
public class Person {
private String name;
private Integer age;
private String sex;
public Person(String name, Integer age, String sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
}
Stream流添加元素。
如果创建List添加。
public static void main(String[] args) {
Person person1 = new Person("qqq",20,"男");
Person person2 = new Person("www",21,"女");
Person person3 = new Person("eee",22,"男");
Person person4 = new Person("rrr",23,"女");
List<Person> personList = new ArrayList<>();
personList.add(person1);
personList.add(person2);
personList.add(person3);
personList.add(person4);
}
这样增加代码量,影响效率。
如果用stream流的话。
List<Person> personList1 = Stream.of(person1, person2, person3, person4).collect(Collectors.toList());
一行就可以解决
获取对象的某一列 将集合中的某个属性的值添加到一个list中。
用List。
List<String> personList1 = new ArrayList<>();
for (Person person : personList) {
personList1.add(person1.getName());
personList1.add(person2.getName());
personList1.add(person3.getName());
personList1.add(person4.getName());
}
用Stream流。
List<String> list = personList.stream().map(Person::getName).collect(Collectors.toList());
过滤掉不需要的元素。
用list。
List<Person> personList2 = new ArrayList<>();
for (Person person : personList) {
if (person.getAge()!=null){
personList2.add(person);
}
}
用stream。
List<Person> list1 = personList.stream().filter(p -> p.getAge() != null).collect(Collectors.toList());
分组 将元素按性别分组
Map<String, List<Person>> collect = personList.stream().collect(Collectors.groupingBy(Person::getSex, Collectors.toList()));
list和map的转换。
list->map
Map<String, Person> map = personList.stream().collect(Collectors.toMap(Person::getName, Function.identity(), (key, key1) -> key1));
其中,(key,key1)->key1 的作用是处理重复的key,将key1覆盖到key,之前用stream流的时候没有用到这个,最近在学习的时候才注意到。
map->list
List<Person> personList3 = map.entrySet().stream().map(e -> e.getValue()).collect(Collectors.toList());
拿到map的value值转为list。
在实习阶段我用list转map 和分组用的比较多,如果有用到for循环的一般是还要处理其中的元素。
以上就是我最近学习的stream流,如果有错误欢迎指出。