文档章节

Java 8 特性—— Streams 构造树结构

黑涩
 黑涩
发布于 2016/04/01 19:39
字数 272
阅读 166
收藏 3
/*获取资源的树结构*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:spring/applicationContext-beans.xml" })
public class SysResourceTree {

    @Autowired
    private ISysResourceService service;

    /**
     * 
     */
    @Test
    public void setChildrens() {
        List<SysResource> list = service.queryByObject(new SysResource());
        System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
        SysResource sysResource = new SysResource();
        sysResource.setId(0l);
//        setChildren(sysResource, list);
        
        new ObjectSetChildren<SysResource>().setChildren(sysResource, list, "parentId", "id", "children");
        
        System.out.println(sysResource.toString());
    }

    /**
     * 用了迭代 性能没考虑
     * 
     * @param sysResource
     * @param list
     * @return
     */
    public SysResource setChildren(SysResource sysResource, List<SysResource> list) {
        List<SysResource> childrens = new ArrayList<SysResource>();
        list.stream().filter((s) -> s.getParentId().equals(sysResource.getId())).forEach((s) -> childrens.add(s));
        sysResource.setChildren(childrens);
        for (SysResource child : childrens) {
            setChildren(child, list);
        }
        return sysResource;
    }
}

class ObjectSetChildren<T> {
    /**
     * 用了迭代 性能没考虑
     * 
     * @param sysResource
     * @param list
     * @return
     */
    public T setChildren(T t, List<T> list, String field1, String field2, String childField) {
        List<T> childrens = new ArrayList<T>();
        list.stream().filter((s) -> getV(s, field1).equals(getV(t, field2))).forEach((s) -> childrens.add(s));
        try {
            BeanUtils.setProperty(t, childField, childrens);
        } catch (IllegalAccessException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (InvocationTargetException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        for (T t1 : childrens) {
            setChildren(t1, list, field1, field2, childField);
        }
        return t;
    }

    /**
     * Lambda 报异常 只能提取出来
     * @param t
     * @param field1
     * @return
     */
    public String getV(T t, String field1) {
        try {
            return BeanUtils.getProperty(t, field1).toString();
        } catch (IllegalAccessException | InvocationTargetException | NoSuchMethodException e) {
            System.err.println("获取字段"+field1+"错误");
            e.printStackTrace();
        }
        return null;
    }
}

封装了一下。

今天面试问了java的三个特性,嘿嘿,【封装】忘记了。

© 著作权归作者所有

黑涩
粉丝 2
博文 7
码字总数 643
作品 0
浦东
后端工程师
私信 提问
Stream.js 1.4.0 发布,Streams 的 JS 实现

Stream.js 1.4.0 发布了,该版本主要围绕全新的中间操作,类似 Haskell 和 Scala 的特性,但还没在 Java 8 Streams API 中实现。新方法包括:, , , 和 . 详情请看 APIDOC 。其他重要变化是对...

oschina
2015/06/14
1K
1
Java 8 vs Scala — Part II Streams API

这是本文的第 2 部分。第 1 部分在这里。 Stream 与 Collection 的比较 这是我按自己的意思给的一个十分简要的说明:collection 是一个有限的数据集,而 stream 是数据的一个序列,可以是有限...

oschina
2015/11/18
4K
16
Reactive Programming 一种技术,各自表述

前言 作为一名 Java 开发人员,尤其是 Java 服务端工程师,对于 Reactive Programming 的概念似乎相对陌生。随着 Java 9 以及 Spring Framework 5 的相继发布,Reactive 技术逐渐开始被广大从...

小马哥mercyblitz
2018/07/23
0
0
Java I/O Streams

原文:https://docs.oracle.com/javase/tutorial/essential/io/streams.html 前言 Java中基础的I/O知识包括两方面:I/O Streams 和 File I/O。这部分学习I/O Streams。 I/O Streams I/O Stre......

琚建飞
03/13
0
0
Microserver 0.87 发布,Java 微服务框架

Microserver 0.87 发布了,该版本主要改进如下: Use Java 8 Streams (or reactive-streams Publishers) to Stream data between Microservices. Standardized error codes, error handling ......

淡漠悠然
2016/07/08
1K
2

没有更多内容

加载失败,请刷新页面

加载更多

使用kubeadm 搭建K8s集群

1. 参考官网 https://kubernetes.io/docs/setup/independent/install-kubeadm/

whhbb
32分钟前
2
0
Dubbo 3.0 !提升不止一点点!

Dubbo 自 2011 年 10 月 27 日开源后,已被许多非阿里系的公司使用,其中既有当当网、网易考拉等互联网公司,也不乏中国人寿、青岛海尔等大型传统企业。 自去年 12 月开始,Dubbo 3.0 便已正...

编程SHA
32分钟前
2
0
提升不止一点点,Dubbo 3.0 预览版详细解读

Dubbo 自 2011 年 10 月 27 日开源后,已被许多非阿里系的公司使用,其中既有当当网、网易考拉等互联网公司,也不乏中国人寿、青岛海尔等大型传统企业。更多用户信息,可以访问Dubbo @GitHub...

阿里云云栖社区
36分钟前
22
0
HanLP Analysis for Elasticsearch

基于 HanLP 的 Elasticsearch 中文分词插件,核心功能: 兼容 ES 5.x-7.x; 内置词典,无需额外配置即可使用; 支持用户自定义词典; 支持远程词典热更新(待开发); 内置多种分词模式,适合...

左手的倒影
57分钟前
1
0
spark部署之yarn模式

spark部署之yarn模式 hadoop-3.0.0集群搭建 配置相应环境 java环境 scala(可配可不配) hadoop环境 从官网下载spark 解压 配置 /conf/spark-env.sh export JAVA_HOME=/usr/java/jdk1.8.0_4...

jackmanwu
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部