Java8的stream().map()用法

在Java编码过程中可能会遇到这个场景:遍历一个列表,对列表中的属性进行转换、赋值等操作形成我们想要的一个新列表。通常我们的常规思路就是直接使用for循环。在Java8引入lambda表达式后我们可以使用stream流链式处理的方式,形成新流来达到预期效果。

stream操作比较多,这里主要针对map()举出下面三个列子来体验stream().map().collect(Collectors.toList())对于集合元素处理的用法。

package com.base.labguage.java8;

import java.util.Arrays;
import java.util.List;
import java.util.stream.Collectors;

public class StreamMap {

    private static class People{
        private String name;
        private Integer age;
        private String address;
		
        // 只给出构造方法,忽略get/set细节
        public People(String name, Integer age, String address) {
            this.name = name;
            this.age = age;
            this.address = address;
        }

    }

    public static class PeoplePub{
        
        private String name;
        private Integer age;

        // 只给出构造方法,忽略get/set细节
        public PeoplePub(String name, Integer age) {
            this.name = name;
            this.age = age;
        }
        
        // 重写toString方法
        public String toString(){
            return "(" + this.name + "," + this.age + ")";

        }

    }

    public static void main(String[] args) {

        List<People> peoples = Arrays.asList(
                new People("zs", 25, "cs"),
                new People("ls", 28, "bj"),
                new People("ww", 23, "nj")
        );

        // List -> String
        List<String> names = peoples.stream().map(p -> p.getName()).collect(Collectors.toList());
        // stream流实现英文字母转大写
        List<String> upNames = names.stream().map(String::toUpperCase).collect(Collectors.toList());
        // stream流实现数字乘倍数
        List<Integer> ages = peoples.stream().map(p -> p.getAge() * 2).collect(Collectors.toList());
        // list - > new List
        List<PeoplePub> peoplePubs = peoples.stream().map(p -> {
            return new PeoplePub(p.getName(), p.getAge());
        }).collect(Collectors.toList());

        System.out.println("to print upnames List : " + upNames);
        System.out.println("to print ages List : " + ages);
        System.out.println("to print new people List" + peoplePubs.toString());

    }

}

控制台打印结果:

to print upnames List : [ZS, LS, WW]
to print ages List : [50, 56, 46]
to print new people List[(zs,25), (ls,28), (ww,23)]
道友可以在博客下方留言互相探讨学习或者关注公众号fairy with you了解更多,欢迎来撩!

在这里插入图片描述

注:本博客仅用于交流学习,不用于任何商业用途,欢迎思维碰撞。
Java 8 中,`Stream` API 提供了强大的数据处理能力,而 `Collectors.toMap()` 是将流中元素收集为 `Map` 结构的重要工具。通过 `stream.map()` 转换数据后,可以使用 `Collectors.toMap()` 来将流中的元素收集为一个 `Map`,其中键和值都可以通过函数指定。 以下是一个完整的示例,展示了如何在 `Stream.map()` 处理数据后,使用 `Collectors.toMap()` 收集为 `Map`: ```java import java.util.*; import java.util.stream.Collectors; class User { private String userId; private String userName; // 构造函数 public User(String userId, String userName) { this.userId = userId; this.userName = userName; } // Getter 方法 public String getUserId() { return userId; } public String getUserName() { return userName; } } public class StreamToMapExample { public static void main(String[] args) { List<User> userList = Arrays.asList( new User("1", "Alice"), new User("2", "Bob"), new User("3", "Charlie") ); // 使用 stream.map() 处理数据后,再使用 Collectors.toMap() 收集为 Map Map<String, String> userMap = userList.stream() .map(user -> new User(user.getUserId(), user.getUserName().toUpperCase())) // 将用户名转换为大写 .collect(Collectors.toMap( User::getUserId, // Map 的键 User::getUserName // Map 的值 )); System.out.println(userMap); } } ``` ### 说明: - `map()` 方法用于对流中的每个 `User` 对象进行转换操作,例如将用户名转换为大写。 - `Collectors.toMap()` 接受两个函数作为参数,分别用于生成键和值。 - 如果流中存在重复的键(由 `User::getUserId` 生成),则默认情况下会抛出 `IllegalStateException`。为避免该异常,可以提供一个合并函数作为第三个参数来处理冲突: ```java .collect(Collectors.toMap( User::getUserId, User::getUserName, (existing, replacement) -> replacement // 冲突时保留新值 )) ``` 此方法在实际开发中常用于将数据结构从列表转换为映射,便于后续通过键快速查找数据[^3]。 --- ###
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值