Merge pull request #16290 from hajk1/BAEL-7497
BAEL-7497 iterator Vs foreach()
This commit is contained in:
		
						commit
						32144f45c6
					
				| @ -3,3 +3,5 @@ | |||||||
| ## Core Java Collections Cookbooks and Examples | ## Core Java Collections Cookbooks and Examples | ||||||
| 
 | 
 | ||||||
| ### Relevant Articles: | ### Relevant Articles: | ||||||
|  | 
 | ||||||
|  | - More articles: [[<-- prev]](/core-java-modules/core-java-collections-5) | ||||||
|  | |||||||
| @ -0,0 +1,64 @@ | |||||||
|  | package com.baeldung.iteratorvsforeach; | ||||||
|  | 
 | ||||||
|  | import static org.junit.jupiter.api.Assertions.assertEquals; | ||||||
|  | import static org.junit.jupiter.api.Assertions.assertIterableEquals; | ||||||
|  | 
 | ||||||
|  | import java.util.ArrayList; | ||||||
|  | import java.util.Collections; | ||||||
|  | import java.util.Iterator; | ||||||
|  | import java.util.List; | ||||||
|  | import java.util.stream.Stream; | ||||||
|  | 
 | ||||||
|  | import org.junit.jupiter.api.Test; | ||||||
|  | import org.junit.jupiter.params.ParameterizedTest; | ||||||
|  | import org.junit.jupiter.params.provider.Arguments; | ||||||
|  | import org.junit.jupiter.params.provider.MethodSource; | ||||||
|  | 
 | ||||||
|  | class IteratorVsForeachUnitTest { | ||||||
|  | 
 | ||||||
|  |     private static Stream<Arguments> listProvider() { | ||||||
|  |         return Stream.of(Arguments.of(List.of("String1", "String2", "unwanted"), List.of("String1", "String2"))); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @Test | ||||||
|  |     public void givenEmptyCollection_whenUsingForEach_thenNoElementsAreIterated() { | ||||||
|  |         List<String> names = Collections.emptyList(); | ||||||
|  |         StringBuilder stringBuilder = new StringBuilder(); | ||||||
|  |         names.forEach(stringBuilder::append); | ||||||
|  |         assertEquals("", stringBuilder.toString()); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @ParameterizedTest | ||||||
|  |     @MethodSource("listProvider") | ||||||
|  |     public void givenCollectionWithElements_whenRemovingElementDuringForEachIteration_thenElementIsRemoved(List<String> input, List<String> expected) { | ||||||
|  |         List<String> mutableList = new ArrayList<>(input); | ||||||
|  |         // Separate collection for items to be removed | ||||||
|  |         List<String> toRemove = new ArrayList<>(); | ||||||
|  | 
 | ||||||
|  |         // Using forEach to identify items to remove | ||||||
|  |         input.forEach(item -> { | ||||||
|  |             if (item.equals("unwanted")) { | ||||||
|  |                 toRemove.add(item); | ||||||
|  |             } | ||||||
|  |         }); | ||||||
|  | 
 | ||||||
|  |         // Removing the identified items from the original list | ||||||
|  |         mutableList.removeAll(toRemove); | ||||||
|  |         assertIterableEquals(expected, mutableList); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     @ParameterizedTest | ||||||
|  |     @MethodSource("listProvider") | ||||||
|  |     public void givenCollectionWithElements_whenRemovingElementDuringIteratorIteration_thenElementIsRemoved(List<String> input, List<String> expected) { | ||||||
|  |         List<String> mutableList = new ArrayList<>(input); | ||||||
|  |         Iterator<String> it = mutableList.iterator(); | ||||||
|  |         while (it.hasNext()) { | ||||||
|  |             String item = it.next(); | ||||||
|  |             if (item.equals("unwanted")) { | ||||||
|  |                 it.remove(); // Safely remove item | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |         assertIterableEquals(expected, mutableList); | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  | } | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user