我有一个巨大的数据从数据库拉到列表,如下所示

List<TestVO> aList=new ArrayList<TestVO>();
TestVO testVO=new TestVO();
testVO.setName("val1");
testVO.setTime("Time is --1");
TestVO testVO2=new TestVO();
testVO2.setName("val2");
testVO2.setTime("Time is --2");
TestVO testVO3=new TestVO();
testVO3.setName("val1");
testVO3.setTime("Time is --3");
aList.add(testVO);
aList.add(testVO2);
aList.add(testVO3);


现在,我想为给定列表中下一个Pojo的Name属性的每个相似值附加“ _” + 1。
最终列表应具有如下的pojo

TestVO [name=val1_1, time=Time is --1]
TestVO [name=val1_2, time=Time is --3]
TestVO [name=val2, time=Time is --2]


请建议我是否可以使用任何Java 8 API?
我曾尝试使用比较器查找重复项,但无法修改中殿数据?感谢你的帮助

最佳答案

您可以分两步进行操作:

将名称重复的TestVO收集到Map中,然后为它们修改名称。

List<TestVO> aList = new ArrayList<TestVO>();
//...
Map<String, TestVO> vosByName =
aList.stream()
     .collect(groupingBy(TestVO::getName))
     .values()
     .stream()
     .filter(l -> l.size()>1)
     .forEach(list -> {
                      int i = 1;
                      for (TestVO vo : list){
                        vo.setName(vo.getName() + "_" + i++);
                      }
                   }
     );

09-13 00:39