/*獲取資源的樹結構*/ @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的三個特性,嘿嘿,【封裝】忘記了。
面試