This looks really ugly. How do I update the CSVRecord using Map.put()?
Is there a reason you didn't use the design I proposed? Adrian Crum Sandglass Software www.sandglass-software.com On 1/20/2014 9:12 PM, ggreg...@apache.org wrote:
Author: ggregory Date: Tue Jan 21 02:12:02 2014 New Revision: 1559905 URL: http://svn.apache.org/r1559905 Log: [CSV-105] Add Map conversion API to CSVRecord. Modified: commons/proper/csv/trunk/src/main/java/org/apache/commons/csv/CSVRecord.java commons/proper/csv/trunk/src/test/java/org/apache/commons/csv/CSVRecordTest.java Modified: commons/proper/csv/trunk/src/main/java/org/apache/commons/csv/CSVRecord.java URL: http://svn.apache.org/viewvc/commons/proper/csv/trunk/src/main/java/org/apache/commons/csv/CSVRecord.java?rev=1559905&r1=1559904&r2=1559905&view=diff ============================================================================== --- commons/proper/csv/trunk/src/main/java/org/apache/commons/csv/CSVRecord.java (original) +++ commons/proper/csv/trunk/src/main/java/org/apache/commons/csv/CSVRecord.java Tue Jan 21 02:12:02 2014 @@ -19,8 +19,10 @@ package org.apache.commons.csv; import java.io.Serializable; import java.util.Arrays; +import java.util.HashMap; import java.util.Iterator; import java.util.Map; +import java.util.Map.Entry; /** * A CSV record parsed from a CSV file. @@ -168,6 +170,19 @@ public final class CSVRecord implements } /** + * Puts all values of this record into the given Map. + * + * @param map The Map to populate. + * @return the given map. + */ + public Map<String, String> putIn(Map<String, String> map) { + for (Entry<String, Integer> entry : mapping.entrySet()) { + map.put(entry.getKey(), values[entry.getValue().intValue()]); + } + return map; + } + + /** * Returns the number of values in this record. * * @return the number of values. @@ -176,6 +191,15 @@ public final class CSVRecord implements return values.length; } + /** + * Converts this record into a Map. + * + * @return A new Map. The map is empty if the record has no headers. + */ + public Map<String, String> toMap() { + return putIn(new HashMap<String, String>(values.length)); + } + @Override public String toString() { return Arrays.toString(values); Modified: commons/proper/csv/trunk/src/test/java/org/apache/commons/csv/CSVRecordTest.java URL: http://svn.apache.org/viewvc/commons/proper/csv/trunk/src/test/java/org/apache/commons/csv/CSVRecordTest.java?rev=1559905&r1=1559904&r2=1559905&view=diff ============================================================================== --- commons/proper/csv/trunk/src/test/java/org/apache/commons/csv/CSVRecordTest.java (original) +++ commons/proper/csv/trunk/src/test/java/org/apache/commons/csv/CSVRecordTest.java Tue Jan 21 02:12:02 2014 @@ -23,6 +23,7 @@ import static org.junit.Assert.assertTru import java.util.HashMap; import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; import org.junit.Before; import org.junit.Test; @@ -37,7 +38,7 @@ public class CSVRecordTest { @Before public void setUp() throws Exception { - values = new String[] { "first", "second", "third" }; + values = new String[] { "A", "B", "C" }; record = new CSVRecord(values, null, null, 0); header = new HashMap<String, Integer>(); header.put("first", Integer.valueOf(0)); @@ -123,4 +124,31 @@ public class CSVRecordTest { } } + @Test + public void testPutInMap() { + Map<String, String> map = new ConcurrentHashMap<String, String>(); + this.recordWithHeader.putIn(map); + this.validateMap(map, false); + } + + @Test + public void testToMap() { + Map<String, String> map = this.recordWithHeader.toMap(); + this.validateMap(map, true); + } + + private void validateMap(Map<String, String> map, boolean allowsNulls) { + assertTrue(map.containsKey("first")); + assertTrue(map.containsKey("second")); + assertTrue(map.containsKey("third")); + assertFalse(map.containsKey("fourth")); + if (allowsNulls) { + assertFalse(map.containsKey(null)); + } + assertEquals("A", map.get("first")); + assertEquals("B", map.get("second")); + assertEquals("C", map.get("third")); + assertEquals(null, map.get("fourth")); + } + }
--------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org For additional commands, e-mail: dev-h...@commons.apache.org