private void getSectionList(final List<KeywordMstDto> keywordList, final KeywordMstDto keyMstDto) {看这段Java代码,我把new dto写在了循环里才实现功能,但是不推荐这种方法,请问该怎么写,写在循环外,每一次的对象都是一个,因此不行 ,请问大神们孩有什么办法,这段代码该怎么写,!!!急
List<SectionDto> sectionList = new ArrayList<SectionDto>();
SectionDto sectionDto = null;
String sectionId = "";
for (KeywordMstDto keywordMst : keywordList) {
if (!sectionId.equals(keywordMst.getBumonCd())) {
sectionDto = new SectionDto();
sectionDto.setSectionId(keywordMst.getBumonCd());
sectionDto.setSectionName(keywordMst.getSectionName());
sectionList.add(sectionDto);
());
sectionId = sectionDto.getSectionId();
}
}
keyMstDto.setSectionList(sectionList);
}
------解决方案--------------------
这有什么问题?为什么不推荐?
我觉得你直接把
SectionDto sectionDto = new SectionDto();
全放循环里也没问题啊
------解决方案--------------------
写在循环外,每一次的对象都是一个 每次的对象都是不同的对象
SectionDto sectionDto = null; 只是创建了一个对象变量
sectionDto = new SectionDto(); 在循环内,每次指向不同的引用,所以是不同的对象
楼主试一下下面的示例,每次都是不同的字符串
List<String> li = new ArrayList<String>();
String str = null;
for (int i =0; i<10; i++) {
str = new String("str" + i);
li.add(str);
}
System.out.println(li.size());
for (String strt : li) {
System.out.println(strt);
}
------解决方案--------------------
写在循环内是担心资源和效率问题吗?如果是并且SectionDto里面成员多或者循环次数很多的话,那么将SectionDto在循环外实例化,然后实现序列化,在循环内直接复制已实例化的SectionDto实例,这样这样会节省很多资源也会快很多;如果SectionDto里面成员不多或者你循环的次数不多的话放在循环里面和外面没什么区别