diff --git a/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/file/transform/DefaultFieldSet.java b/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/file/transform/DefaultFieldSet.java index c1c1d1b489..dde1f67026 100644 --- a/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/file/transform/DefaultFieldSet.java +++ b/spring-batch-infrastructure/src/main/java/org/springframework/batch/item/file/transform/DefaultFieldSet.java @@ -24,8 +24,10 @@ import java.text.SimpleDateFormat; import java.util.Arrays; import java.util.Date; +import java.util.HashMap; import java.util.List; import java.util.Locale; +import java.util.Map; import java.util.Properties; import org.springframework.lang.Nullable; @@ -40,6 +42,7 @@ * @author Rob Harrop * @author Dave Syer * @author Mahmoud Ben Hassine + * @author Choi Wang Gyu */ public class DefaultFieldSet implements FieldSet { @@ -60,6 +63,8 @@ public class DefaultFieldSet implements FieldSet { private List names; + private Map nameIndexMap; + /** * The {@link NumberFormat} to use for parsing numbers. If unset the {@link Locale#US} * will be used ('.' as decimal place). @@ -137,6 +142,10 @@ public DefaultFieldSet(String[] tokens, String[] names, @Nullable DateFormat dat } this.tokens = tokens.clone(); this.names = Arrays.asList(names); + this.nameIndexMap = new HashMap<>(names.length); + for (int i = 0; i < names.length; i++) { + this.nameIndexMap.put(names[i], i); + } setDateFormat(dateFormat == null ? getDefaultDateFormat() : dateFormat); setNumberFormat(numberFormat == null ? getDefaultNumberFormat() : numberFormat); } @@ -450,11 +459,11 @@ protected String readAndTrim(int index) { * @throws IllegalArgumentException if a column with given name is not defined. */ protected int indexOf(String name) { - if (names == null) { + if (nameIndexMap == null) { throw new IllegalArgumentException("Cannot access columns by name without meta data"); } - int index = names.indexOf(name); - if (index >= 0) { + Integer index = nameIndexMap.get(name); + if (index != null) { return index; } throw new IllegalArgumentException("Cannot access column [" + name + "] from " + names);