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));




Map<String, Employee>:

  

​
  // key - name, value - Employee
    Map<String, Employee> map1 = employeeList.stream()
                .collect(toMap(Employee::getName, Function.identity()));

​



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 在List中使用forEach

例子:

(1)获取所有Employee的name

    

List<String> names = new ArrayList<>();
    employeeList.forEach(employee -> names.add(employee.getName()));


1.3 在Map中使用forEach

例子:

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

   List<String> personInfos = new ArrayList<>();
    map1.forEach((key, value) -> personInfos.add(key + "/" + value.getAge() + "/" + value.getCity()));


2 filter

filter用于过滤元素。

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

例子:

(1)筛选出住在London的Employee

List<Employee> afterFilter = employeeList.stream()
                .filter(employee -> "London".equals(employee.getCity()))
                .collect(toList());



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);



2.2.2 多条件
例子:

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

Employee result = employeeList.stream()
    .filter(employee -> ("London".equals(employee.getCity()) && employee.getAge() < 20))
    .findAny()
    .orElse(null);



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("");



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());


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

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

例子:

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

List<String> nameList = employeeList.stream()
                .map(Employee::getName)
                .collect(toList());


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
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

orange大数据技术探索者

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值