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.PN4和XP- 设为newIDAPN5和XP- 设为newIDBPN6和HP- 设为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)
你可以有一个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)