The challenge
Given an array of integers as strings and numbers, return the sum of the array values as if all were numbers.
Return your answer as a number.
The solution in Java code
Option 1 (using stream
):
import java.util.List; public class MixedSum { public int sum(List<?> mixed) { return mixed.stream().mapToInt(o -> Integer.parseInt(o.toString())).sum(); } }
Option 2 (the harder way):
import java.util.List; public class MixedSum { public int sum(List<?> mixed) { int sum = 0; for (Object element : mixed) { if (element instanceof Integer) { sum += (Integer) element; } else if (element instanceof String) { sum += Integer.parseInt( (String) element ); } } return sum; } }
Option 3 (using Objects
):
import java.util.List; public class MixedSum { public int sum(List<?> mixed) { int x = 0; for(Object s: mixed){ x+=Integer.parseInt(s.toString()); } return x; } }
Test cases to validate our solution
import org.junit.Test; import static org.junit.Assert.assertEquals; import org.junit.runners.JUnit4; import java.util.Arrays; public class SolutionTest { MixedSum mixedSum = new MixedSum(); @Test public void test_1() { assertEquals(10, mixedSum.sum(Arrays.asList(5,"5"))); } @Test public void test_2() { assertEquals(22, mixedSum.sum(Arrays.asList(9, 3, "7", "3"))); } @Test public void test_3() { assertEquals(42, mixedSum.sum(Arrays.asList("5", "0", 9, 3, 2, 1, "9", 6, 7))); } @Test public void test_4() { assertEquals(41, mixedSum.sum(Arrays.asList("3", 6, 6, 0, "5", 8, 5, "6", 2, "0"))); } @Test public void test_5() { assertEquals(45, mixedSum.sum(Arrays.asList("1", "5", "8", 8, 9, 9, 2, "3"))); } @Test public void test_6() { assertEquals(41, mixedSum.sum(Arrays.asList("3", 6, 6, 0, "5", 8, 5, "6", 2, "0"))); } @Test public void test_7() { assertEquals(61, mixedSum.sum(Arrays.asList(8, 0, 0, 8, 5, 7, 2, 3, 7, 8, 6, 7))); } }