java8 foreach map,java8 forEach、filter、map

1 forEach

forEach用于遍历元素。

1.1 准备数据

List:

List 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:

// key - name, value - Employee

Map 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 names = new ArrayList<>();

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

1

2

1.3 在Map中使用forEach

例子:

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

List 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 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 arrayBefore = Arrays.asList("a", "b", "c", "d");

List arrayAfter = arrayBefore.stream()

.map(String::toUpperCase)

.collect(toList());

1

2

3

4

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

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

例子:

(1)获取List中的name集合

List nameList = employeeList.stream()

.map(Employee::getName)

.collect(toList());

1

2

3

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

例子:

(1)将List 转换为List

List personList = employeeList.stream()

.map(employee -> {

Person person = new Person();

person.setName(employee.getName());

return person;

})

.collect(toList());

1

2

3

4

5

6

7

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值