stream流,转set和map
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 | package com.mayikt.stream; import com.mayikt.entity.UserEntity; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.Optional; import java.util.Set; import java.util.stream.Collectors; import java.util.stream.Stream; public class Test01 { public static void main(String[] args) { List<UserEntity> userEntityList = new ArrayList<>(); userEntityList.add( new UserEntity( "mayikt" , 20 )); userEntityList.add( new UserEntity( "meite" , 28 )); userEntityList.add( new UserEntity( "zhangsan" , 35 )); userEntityList.add( new UserEntity( "xiaowei" , 16 )); userEntityList.add( new UserEntity( "xiaowei" , 16 )); /** * 创建stream两种方式 * 1.串行流 * 2.并行流 */ Stream<UserEntity> stream = userEntityList.stream(); /** * 转换成set集合 */ Set<UserEntity> userSet = stream.collect(Collectors.toSet()); userSet.forEach(userEntity -> System.out.println(userEntity)); /** * stream将list转换成map * list集合只有元素,此处将user的userName作为key,user对象作为value,转map */ /* Map<String, UserEntity> userEntityMap = userSet.stream().collect(Collectors.toMap(new Function<UserEntity, String>() { @Override public String apply(UserEntity userEntity) { return userEntity.getUserName(); } }, new Function<UserEntity, UserEntity>() { @Override public UserEntity apply(UserEntity userEntity) { return userEntity; } })); */ Map<String, UserEntity> userEntityMap = userSet.stream() .collect(Collectors.toMap(userEntity -> userEntity.getUserName(), userEntity -> userEntity)); userEntityMap.forEach((k, v) -> System.out.println(k + "," + v)); /** * Stream reduce求和 */ Stream<Integer> integerStream = Stream.of( 10 , 50 , 30 , 20 ); Optional<Integer> reduce = integerStream.reduce((a1, a2) -> a1 + a2); System.out.println(reduce.get()); } } |
注意:stream转set的时候,set是去重的,因此UserEntity要重写equals和hashCode。
UserEntity:
package com.mayikt.entity; import java.util.Objects; public class UserEntity { private String userName; private int age; public UserEntity(String userName, int age) { this.userName = userName; this.age = age; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; UserEntity that = (UserEntity) o; return age == that.age && Objects.equals(userName, that.userName); } @Override public int hashCode() { return Objects.hash(userName, age); } @Override public String toString() { return "UserEntity{" + "userName='" + userName + '\'' + ", age=" + age + '}'; } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY