java高效开发实战_JAVA高效编程四(流编程实战案例)

package com.imooc.zhangxiaoxi.stream.cases;

import com.google.common.collect.Lists;

import lombok.AllArgsConstructor;

import lombok.Data;

import lombok.NoArgsConstructor;

import org.junit.Before;

import org.junit.Test;

import java.util.ArrayList;

import java.util.List;

import java.util.stream.Collectors;

/**

* 类名称:CaseThree

* ********************************

*

* 类描述:案例三

* 重点讲解:flatMap的使用方式

*

* @author zhangxiaoxi

* @date 下午9:50

*/

public class CaseThree {

/**

* 角色

*/

@Data

@AllArgsConstructor

@NoArgsConstructor

class Role {

/**

* 权限列表

*/

private List permissions;

}

/**

* 权限

*/

@Data

@AllArgsConstructor

class Permission {

/**

* 权限名称

*/

private String name;

}

/**

* 用户角色列表

*/

List roleList;

@Before

public void init() {

roleList = new ArrayList();

Role adminRole = new Role();

List adminPermissionList = Lists.newArrayList(

new Permission("删除"),

new Permission("查看"),

new Permission("导出"));

adminRole.setPermissions(adminPermissionList);

Role userRole = new Role();

List userPermissionList = Lists.newArrayList(

new Permission("新建"),

new Permission("修改"),

new Permission("删除"),

new Permission("查看"));

userRole.setPermissions(userPermissionList);

roleList.add(adminRole);

roleList.add(userRole);

}

@Test

public void findPermission() {

roleList.stream()

// TODO 扁平化MAP 获取对象中的集合类属性,组成一个新的流

// 注意flatMap和map方法的区别,flatMap是组成一个新的流,而map仅仅是映射成另外一个对象

// 此处如果是用的是map(role -> role.getPermission()),得到的是Stream>,

// 如果用的是map(role -> role.getPermisson().stream()),得到是Stream>>

// 如果用的是flatMap(role -> role.getPermission().stream()),得到的是Stream

.flatMap(role -> role.getPermissions().stream())

// peek 与 forEach 类似,区别是用在中间过程中,后面可以接其他操作

.peek(permission ->

System.out.println("新的流元素:" + permission))

.distinct()

// .forEach(permission -> System.out.println(permission));

.collect(Collectors.toList());

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值