java8 stream 流式编程
list转map
@Data
public class Person {
private String id;
private String name;
private int age;
public Person(String id, String name, int age) {
this.id = id;
this.name = name;
this.age = age;
}
}
public class StreamTest {
public static void main(String[] args) {
List<Person> people = new ArrayList<>();
Person person1 = new Person("1", "张三", 10);
Person person2 = new Person("2", "李四", 20);
Person person3 = new Person("3", "王五", 10);
people.add(person1);
people.add(person2);
people.add(person3);
// list 转 map
Map<String, Person> collect = people.stream().collect(Collectors.toMap(Person::getId, k -> k));
// System.out::println 可以看作 lambda表达式 e -> System.out.println(e) 的缩写形式。
collect.values().forEach(System.out::println);
}
}
过滤
public class StreamTest {
public static void main(String[] args) {
List<Person> people = new ArrayList<>();
Person person1 = new Person("1", "张三", 10);
Person person2 = new Person("2", "李四", 20);
Person person3 = new Person("3", "王五", 10);
people.add(person1);
people.add(person2);
people.add(person3);
// list 过滤年龄==10的
List<Person> collect = people.stream().filter(p -> p.getAge() == 10).collect(Collectors.toList());
collect.forEach(System.out::println);
}
}
分组操作
Map<String, List<DoExtchCfg>> channelMap = doExtchCfgs.stream().collect(Collectors.groupingBy(DoExtchCfg::getExtChannelCode));
v1, v2 自定义选择
Map<String, String> keyMaps = sysRoleFiledMenuVos.stream().filter(m -> StringUtils.isNotEmpty(m.getPerms()))
.collect(Collectors.toMap(SysRoleFiledMenuVo::getPerms, SysRoleFiledMenuVo::getShowEditStatus, (v1, v2) -> {
if (Integer.parseInt(v1) < Integer.parseInt(v2)) {
return v1;
} else {
return v2;
}
}));
分组后 value为属性集合
Map<Long, Set<String>> collect = menuList.stream().collect(Collectors.groupingBy(SysMenu::getParentId, Collectors.mapping(SysMenu::getMenuName, Collectors.toSet())));
对象列表获取子列表并累加集合
List<XnMenu> menus = dir.stream().flatMap(item -> item.getChildren().stream()).collect(Collectors.toList());
if (!menus.isEmpty()) {
return menus.stream().flatMap(item -> item.getSysMethods().stream()).map(XnButton::getPerms).collect(Collectors.toSet());
}
标签:
stream
, Collectors.toMap
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 【杭电多校比赛记录】2025“钉耙编程”中国大学生算法设计春季联赛(1)