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());
}
posted @ 2021-10-12 16:58  倔强的老铁  阅读(50)  评论(0编辑  收藏  举报