2011-12-26 1 views
0

В Java я хочу получить список из списка. Я не могу использовать subList из java, поскольку я хочу, чтобы список был основан на некотором значении valus в списке.Получение подписок в Java

У меня есть список объектов DTO. DTO, как

MyClass myClass; 
int hit; 

И MyClass, как

String webName; 
... 

Я хочу, чтобы получить подсписки, который имеет такой же webName (мне нужно добавить всего хитов webName и удалить dupicate объекты DTO, который имеет такой же webName)

ответ

1

Судя по вашему вопросу , у вас есть

List<MyDTO> dtos; 

и вы хотите, чтобы добраться до

List<List<MyDTO>> sublists; 

Так просто перебирать свои DTO-х, найти правильную запись в карте, а также добавить хиты в контейнер. Карта будет содержать только одну запись для каждого имени.

Map<String, List<MyDTO>> hitmap = new HashMap<String, List<MyDTO>>(); 

for (MyDTO dto: dtos){ 
    String webname = dto.getMyClass().getWebName(); 
    List<MyDTO> list = hitmap.get(webname); 
    if (list==null){ 
    list = new ArrayList<MyDTO>(); 
    hitmap.put(webname, list); 
    } 
    list.add(dto); 
} 

Затем, если вы на самом деле просто хотите кучу подсписков, просто получить его из значений

List<List<MyDTO>> sublists = new ArrayList<List<MyDTO>>(hitmap.values()); 
+0

я не хочу карту. Мне нужен только список. Мне нужно вернуть тот же объект списка к методам вызова. я не могу изменить, поскольку мне нужно использовать код другого. – tomK

+0

Адаптированный ответ для возврата подписок. Если это не то, что вам нужно, приспособите свой вопрос, чтобы явно называть тот тип, который вам нужен. –

+0

Список/карта содержит только ссылки на ваши DTO. Это те же экземпляры DTO. – jackrabbit

0

Как насчет?

Провести список DTOS, который имеет такое же имя

Map<String, List<YourDTO> > mapNameToDtos 

или даже лучше

провести только подсчет, который имеет такое же имя

Map<String, Integer > mapNameToCount