2020
2121import javax .transaction .Transactional ;
2222import java .util .*;
23+ import java .util .function .Function ;
2324import java .util .stream .Collectors ;
2425
2526@ Service
@@ -247,7 +248,7 @@ private ListBaseFieldsInterface convertToBaseFields(ListEntity entity, ListBaseF
247248 }
248249
249250 private void updateEntity (ListEntity entity , @ Valid ListNewRequest list ) throws BrAPIServerException {
250-
251+ // Update simple fields
251252 if (list .getAdditionalInfo () != null )
252253 entity .setAdditionalInfo (list .getAdditionalInfo ());
253254 if (list .getListDescription () != null )
@@ -268,33 +269,46 @@ private void updateEntity(ListEntity entity, @Valid ListNewRequest list) throws
268269 entity .setListOwnerPerson (person );
269270 }
270271
272+ // Update list items
271273 if (list .getData () != null ) {
272- // Clear existing items
274+ // Initialize entity.getData() if it's null
273275 if (entity .getData () == null ) {
274276 entity .setData (new ArrayList <>());
275- } else {
276- entity .getData ().clear ();
277277 }
278278
279- // Add new items
280- ListIterator <String > iter = list .getData ().listIterator ();
281- while (iter .hasNext ()) {
282- String item = iter .next ();
279+ // Create a map of existing items for efficient lookup
280+ Map <String , ListItemEntity > existingItems = entity .getData ().stream ()
281+ .filter (item -> item .getItem () != null )
282+ .collect (Collectors .toMap (
283+ ListItemEntity ::getItem ,
284+ Function .identity (),
285+ (existing , replacement ) -> existing ,
286+ HashMap ::new
287+ ));
288+
289+ List <ListItemEntity > updatedItems = new ArrayList <>();
290+ int position = 0 ;
291+
292+ for (String item : list .getData ()) {
283293 if (item != null ) {
284- ListItemEntity itemEntity = new ListItemEntity ();
285- itemEntity .setPosition (iter .nextIndex ());
286- itemEntity .setItem (item );
287- itemEntity .setList (entity );
288- entity .getData ().add (itemEntity );
294+ ListItemEntity itemEntity = existingItems .get (item );
295+ if (itemEntity == null ) {
296+ // Create new item if it doesn't exist
297+ itemEntity = new ListItemEntity ();
298+ itemEntity .setItem (item );
299+ itemEntity .setList (entity );
300+ }
301+ itemEntity .setPosition (position ++);
302+ updatedItems .add (itemEntity );
289303 }
290304 }
305+
306+ // Update the list with new and updated items
307+ entity .getData ().clear ();
308+ entity .getData ().addAll (updatedItems );
291309 } else {
292- if (entity .getData () == null ) {
293- entity .setData (new ArrayList <>());
294- } else {
295- entity .getData ().clear ();
296- }
310+ // If data is null, initialize an empty list
311+ entity .setData (new ArrayList <>());
297312 }
298-
299313 }
300314}
0 commit comments