/*获取资源的树结构*/
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:spring/applicationContext-beans.xml" })
public class SysResourceTree {
@Autowired
private ISysResourceService service;
/**
*
*/
@Test
public void setChildrens() {
List list = service.queryByObject(new SysResource());
System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>");
SysResource sysResource = new SysResource();
sysResource.setId(0l);
// setChildren(sysResource, list);
new ObjectSetChildren().setChildren(sysResource, list, "parentId", "id", "children");
System.out.println(sysResource.toString());
}
/**
* 用了迭代 性能没考虑
*
* @param sysResource
* @param list
* @return
*/
public SysResource setChildren(SysResource sysResource, List list) {
List childrens = new ArrayList();
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 {
/**
* 用了迭代 性能没考虑
*
* @param sysResource
* @param list
* @return
*/
public T setChildren(T t, List list, String field1, String field2, String childField) {
List childrens = new ArrayList();
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的三个特性,嘿嘿,【封装】忘记了。