我有豆子,如下所示
public class CleanPermission {
private int id;
private int objectId;
private boolean visible;
private boolean order;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public int getObjectId() {
return objectId;
}
public void setObjectId(int objectId) {
this.objectId = objectId;
}
public boolean isVisible() {
return visible;
}
public void setVisible(boolean visible) {
this.visible = visible;
}
public boolean isOrder() {
return order;
}
public void setOrder(boolean order) {
this.order = order;
}
}
public class Permission {
private int id;
private AppPermission appPermission;
private int objectId;
private boolean enabled;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public AppPermission getAppPermission() {
return appPermission;
}
public void setAppPermission(AppPermission appPermission) {
this.appPermission = appPermission;
}
public int getObjectId() {
return objectId;
}
public void setObjectId(int objectId) {
this.objectId = objectId;
}
public boolean isEnabled() {
return enabled;
}
public void setEnabled(boolean enabled) {
this.enabled = enabled;
}
}
在 CleanPermission 中.java可见的顺序是权限中引用 AppPermission 的权限.java
我将从服务器(列表(获得清洁权限列表。我想根据权限类型将此清理权限列表转换为列表(可见创建单独的权限对象(。
目前我正在像下面这样转换。但是我想使用 java 流来转换它。因此,我需要帮助才能使用 java 流进行转换。
public List<Permission> get(List<CleanPermission> cleanPermissions) {
List<Permission> permissions = new ArrayList();
Permission permission;
for (CleanPermission cleanPermission : cleanPermissions) {
permission = new Permission();
permission.setAppObjectType(cleanPermission.getAppObjectType());
permission.setEnabled(cleanPermission.isVisible());
permission.setAppPermission(new Permission(){{
setId(1);
}});
permissions.add(permission);
permission = new Permission();
permission.setObjectId(cleanPermission.getObjectId());
permission.setEnabled(cleanPermission.isOrder());
permission.setAppPermission(new Permission(){{
setId(2);
}});
permissions.add(permission);
}
if (!permissions.isEmpty()) {
System.out.println(permissions.size());
}
return permissions;
}
示例数据:
List<CleanPermission> cleanPermissions = new ArrayList() {
{
add(new CleanPermission() {
{
setVisible(true);
setOrder(false);
setObjectId(1);
}
});
add(new CleanPermission() {
{
setVisible(false);
setOrder(false);
setObjectId(2);
}
});
add(new CleanPermission() {
{
setVisible(true);
setOrder(true);
setObjectId(3);
}
});
}
};
有十几种方法可以使用流式处理 API 重构它。首先,我建议封装转换方法。
public List<Permission> convert(CleanPermission cp) {
List<Permission> permissions= new ArrayList<>()
permission = new Permission();
permission.setAppObjectType(cleanPermission.getAppObjectType());
permission.setEnabled(cleanPermission.isVisible());
permission.setAppPermission(new Permission(){{
setId(1);
}});
permissions.add(permission);
permission = new Permission();
permission.setObjectId(cleanPermission.getObjectId());
permission.setEnabled(cleanPermission.isOrder());
permission.setAppPermission(new Permission(){{
setId(2);
}});
permissions.add(permission);
return permissions;
}
和加工
cleanPermissions.stream().map(this::convert)
.flatMap(Collection::stream).collect(Collectors.toList());
或
cleanPermissions.stream().map(this::convert)
.collect(ArrayList::new, ArrayList::addAll, ArrayList::addAll);
试试这个。
@SafeVarargs
static <T> T build(T t, Consumer<T>... setters) {
for (Consumer<T> b : setters)
b.accept(t);
return t;
}
public List<Permission> get(List<CleanPermission> cleanPermissions) {
return cleanPermissions.stream()
.flatMap(c -> Stream.of(
build(new Permission(),
p -> p.setAppObjectType(c.getAppObjectType()),
p -> p.setEnabled(c.isVisible()),
p -> p.setAppPermission(
build(new Permission(), a -> a.setId(1)))),
build(new Permission(),
p -> p.setObjectId(c.getObjectId()),
p -> p.setEnabled(c.isOrder()),
p -> p.setAppPermission(
build(new Permission(), a ->a.setId(2))))))
.collect(Collectors.toList());
}