Java 8 特性—— Streams 构造树结构
2016-04-01 00:00
399 查看
摘要: 运用 Java 8 特性—— Streams( Filter)
封装了一下。
今天面试问了java的三个特性,嘿嘿,【封装】忘记了。
/*获取资源的树结构*/ @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的三个特性,嘿嘿,【封装】忘记了。
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序
- 快速排序
- 二叉查找树