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):

1
2
3
4
5
6
7
8
9
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):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
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):

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
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

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
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)));
    }
}