在Java中获取子列表

在Java中获取子列表,java,list,sublist,Java,List,Sublist,在Java中,我想从列表中获取子列表。我不能使用java的子列表,因为我需要基于列表中某些值的子列表 我有DTO对象的列表。DTO就像 MyClass myClass; int hit; 我的班级就像 String webName; ... 我想获得具有相同webName的子列表(我需要添加webName的总点击量并删除具有相同webName的对象的重复数据)如何 保存具有相同名称的DTO列表 映射mapNameToDtos 甚至更好 只保留同名的计数 映射mapNameToCount 从

在Java中,我想从列表中获取子列表。我不能使用java的子列表,因为我需要基于列表中某些值的子列表

我有DTO对象的列表。DTO就像

MyClass myClass;
int hit;
我的班级就像

String webName;
...
我想获得具有相同webName的子列表(我需要添加webName的总点击量并删除具有相同webName的对象的重复数据)

如何

保存具有相同名称的DTO列表

映射mapNameToDtos
甚至更好

只保留同名的计数

映射mapNameToCount

从您的问题判断,您现在拥有的是

List<MyDTO> dtos;
列出dto;
你想去吗

List<List<MyDTO>> sublists;
列表子列表;
因此,只需迭代dto,在映射中找到正确的条目,并将点击添加到容器中。地图将确保每个webname只有一个条目

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);
}
Map hitmap=newhashmap();
用于(MyDTO dto:dtos){
字符串webname=dto.getMyClass().getWebName();
List=hitmap.get(webname);
if(list==null){
列表=新的ArrayList();
hitmap.put(webname,list);
}
列表。添加(dto);
}
然后,如果您真的只需要一堆子列表,只需要从值中获取它

List<List<MyDTO>> sublists = new ArrayList<List<MyDTO>>(hitmap.values());
List sublist=newarraylist(hitmap.values());

我不想要地图。我只需要清单。我需要将相同的列表对象返回给调用方法。我不能修改,因为我必须使用其他人的代码。修改答案以返回子列表。如果这不是您所需要的,请调整您的问题以显式命名您需要的类型。列表/映射仅包含对DTO的引用。它们是相同的DTO实例。在我的情况下,webname可能是重复的。所以,若我为Map调用put,它会不会替换前面的对象?在示例代码中,它是hitmap.put(webname,list);不,因为它首先尝试获取具有该webname的列表。如果它已经在地图上,它就会得到现有的列表。换句话说,如果webname还不在映射中,那么此代码只执行
put
调用。
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());