迭代循环并基于条件检查设置新值 - java

use*_*222 6 java collections foreach

我想创建一个条件,如果产品具有相同的模型,我想设置newID's(A,B,C).下表是我在调用List<MyDTO>when getAllListValue()方法时返回的示例数据.

样本数据:

pID    prodName  Model    Year 
10       PN1      ABX      1999
11       PN2      ABX      1999
12       PN3      ABX      2000
13       PN4      XP       2002
14       PN5      xP       2003
15       PN6      HP       2006
16       PN7      LX       2008
17       PN8      LX       2009
Run Code Online (Sandbox Code Playgroud)
  • 对于PN1和模型ABX我想设置newID为A.
  • 对于PN2和模型ABX我想设置newID为B.
  • 对于PN3和模型ABX我想设置newID为C.
  • 为- PN4XP- 设为newIDA
  • 为- PN5XP- 设为newIDB
  • 为- PN6HP- 设为newIDA
  • ..

示例代码:

public class MyDTO {
    private String pID;
    private String productName;
    private String model;
    private String year;
    private String newID;
    // getter & setter
}

public class UseLoop {
    //logic
    List<MyDTO> dtoList = getAllListValue();
    //here i want to iterate the list and set the newID (A,B,c) for the products with same model
    for(MyDTO dto : dtoList) {   
        //here how can i compare with previous object and assign the newID if the product has the same model.
    }
}
Run Code Online (Sandbox Code Playgroud)

Kir*_*nov 1

你可以有一个Map<String, Character>wich 键是模型名称,值是新 id 的递增字符。

Map<String, Character> map = new HashMap<>();
List<MyDTO> dtoList = getAllListValue();
for (MyDTO dto : dtoList) {
    // put 'A' in the map if the model name is not present yet, 
    // increment character otherwise
    Character c = map.merge(dto.getModel(), 'A', (k, v) -> (char) (v + 1));
    dto.setNewID(c.toString());
}
Run Code Online (Sandbox Code Playgroud)

这将产生类似以下内容:

MyDTO{pID='10', productName='PN1', model='ABX', year='1999', newID='A'}
MyDTO{pID='11', productName='PN2', model='ABX', year='1999', newID='B'}
MyDTO{pID='12', productName='PN3', model='ABX', year='2000', newID='C'}
MyDTO{pID='13', productName='PN4', model='XP', year='2000', newID='A'}
MyDTO{pID='14', productName='PN5', model='XP', year='2003', newID='B'}
MyDTO{pID='15', productName='PN6', model='HP', year='2006', newID='A'}
MyDTO{pID='16', productName='PN7', model='LX', year='2008', newID='A'}
MyDTO{pID='17', productName='PN8', model='LX', year='2009', newID='B'}
Run Code Online (Sandbox Code Playgroud)