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