java8 forEach、filter、map

2019-11-19 01:20:18

参考地址 java8 forEach、filter、map

1 forEach

forEach用于遍历元素。


1.1 准备数据

List<Employee>:


List<Employee> employeeList = new ArrayList<>();

employeeList.add(new Employee("Alice", 23, "London", 1200.00));

employeeList.add(new Employee("Bob", 19, "London", 2000.00));

employeeList.add(new Employee("Charles", 25, "New York", 1650.00));

employeeList.add(new Employee("Dorothy", 20, "Hong Kong", 1200.00));

1

2

3

4

5

Map<String, Employee>:


// key - name, value - Employee

Map<String, Employee> map1 = employeeList.stream()

                .collect(toMap(Employee::getName, Function.identity()));

1

2

3

Person:


public class Person {


    private String userName;

    private Integer age;


    public Person() {

    }


    public String getUserName() {

        return userName;

    }


    public void setUserName(String userName) {

        this.userName = userName;

    }


    public Integer getAge() {

        return age;

    }


    public void setAge(Integer age) {

        this.age = age;

    }

}

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

1.2 在List中使用forEach

例子:


(1)获取所有Employee的name


List<String> names = new ArrayList<>();

employeeList.forEach(employee -> names.add(employee.getName()));

1

2

1.3 在Map中使用forEach

例子:


(1)获取所有Employee的人员信息


List<String> personInfos = new ArrayList<>();

map1.forEach((key, value) -> personInfos.add(key + "/" + value.getAge() + "/" + value.getCity()));

1

2

2 filter

filter用于过滤元素。


2.1 通过filter()过滤元素,通过collect() 收集元素

例子:


(1)筛选出住在London的Employee


List<Employee> afterFilter = employeeList.stream()

                .filter(employee -> "London".equals(employee.getCity()))

                .collect(toList());

1

2

3

2.2 filter()、findAny()、orElse()配合使用

filter()、findAny()、orElse()配合使用,可以根据条件获取某个元素,如果没有返回指定的值。


2.2.1 单条件

例子:


(1)找到名字为Alice的任何一个对象,如果不存在返回null


Employee alice = employeeList.stream()

                .filter(employee -> "Alice".equals(employee.getName()))

                .findAny()

                .orElse(null);

1

2

3

4

2.2.2 多条件

例子:


(1)根据city和age筛选对象


Employee result = employeeList.stream()

.filter(employee -> ("London".equals(employee.getCity()) && employee.getAge() < 20))

.findAny()

.orElse(null);

1

2

3

4

2.3 通过filter()过滤,通过map()转换

有时候经过筛选之后,我们想得到的可能不是对象本身,而是对象中的一个属性,可以通过map转换。


例子:


(1)找到名字为Alice的任何一个对象,返回它的属性,如果不存在返回""


String attribute = employeeList.stream()

.filter(employee -> "Alice".equals(employee.getName()))

.map(employee -> (employee.getName() + "/" + employee.getAge() + "/" + employee.getCity()))

.findAny()

.orElse("");

1

2

3

4

5

3 map

通过map可以将一种类型的对象转换成另一种类型的对象。


3.1 简单的同类型转换

(1)小写字母转换为大写字母


List<String> arrayBefore = Arrays.asList("a", "b", "c", "d");

List<String> arrayAfter = arrayBefore.stream()

.map(String::toUpperCase)

.collect(toList());

1

2

3

4

3.2 获取对象集合的某个属性集合

可以通过map提取对象集合的某个属性集合。


例子:


(1)获取List<Employee>中的name集合


List<String> nameList = employeeList.stream()

                .map(Employee::getName)

                .collect(toList());

1

2

3

3.3 一种类型的对象集合转换成另一种类型的对象集合

例子:


(1)将List<Employee> 转换为List<Person>


List<Person> personList = employeeList.stream()

                .map(employee -> {

                    Person person = new Person();

                    person.setName(employee.getName());

                    return person;

                })

                .collect(toList());

1

2

3

4

5

6

7



  • 2020-12-01 16:19:26

    vue中动画分布解析

    enter, enter-active, enter-active-to, (开始 进入阶段的)第1帧 属性值,到 (默认属性值 的过渡阶段),移除enter动画, leave, leave-active, leave-active-to (开始 离开 阶段的)第1帧 默认属性值,到 (属性值 的过渡阶段),移除leave动画

  • 2020-12-01 16:21:47

    Meteor与express结合开发

    Meteor本质上是一个已经公开了连接 http服务器的节点应用程序,这意味着您可以像下面这样定义服务器路由:,如果您坚持使用Express,则可以将Express路由注册为Connect中间件,如下所示:

  • 2020-12-01 16:25:32

    nuxtjs引入jquery

    nuxt引入jQuery库 nuxtjs如何添加 Webpack 插件?

  • 2020-12-01 16:43:37

    fieldset标签做输入框

    比如 vuetify中的 input组件,就用到了fieldset做边框, 这个时候我们想改边框,却找不到border,因为fieldset是靠color来修改边框颜色的。

  • 2020-12-01 17:25:39

    axios并发操作

    很多时候,我们需要同时向后端进行多个请求,当所有请求都返回数据后,再进行一些操作。