こういう感じになるでしょうか。
java
1package sample;
2
3import java.util.ArrayList;
4import java.util.HashMap;
5import java.util.List;
6import java.util.Map;
7import java.util.Optional;
8
9public class Histogram {
10
11 // 入力値
12 List<Integer> points = new ArrayList<>();
13
14 // ヒストグラム値
15 Map<Integer,Integer> distribution = new HashMap<>();
16
17 // 値を設定する
18 public void setValues(List<Integer> points) {
19 this.points.addAll(points);
20 }
21
22 // 10点ごとのヒストグラムにした結果を返す。キー名は仮に2桁目以降の値。
23 public Map<Integer,Integer> getDistribution() {
24 points.stream().forEach(point -> {
25 int dist = point.intValue() / 10;
26 int count = Optional.ofNullable(distribution.get(dist)).orElse(0);
27 distribution.put(dist, ++count);
28 });
29
30 return distribution;
31 }
32}
テストケースは次の通り:
java
1package test;
2
3import static org.junit.Assert.*;
4
5import java.util.Arrays;
6import java.util.Map;
7
8import org.junit.Before;
9import org.junit.Test;
10
11import sample.Histogram;
12
131416
17public class HistogramTest {
18
19 Histogram histogram;
20
21 2223
24 @Before
25 public void setUp() throws Exception {
26 histogram = new Histogram();
27 }
28
29 @Test
30 public void test() {
31 histogram.setValues(Arrays.asList(0,10,20,30,40,50,60,70,80,90,100));
32
33 Map<Integer,Integer> dist = histogram.getDistribution();
34
35 assertEquals(new Integer(1) , dist.get(0));
36 assertEquals(new Integer(1) , dist.get(1));
37 assertEquals(new Integer(1) , dist.get(2));
38 assertEquals(new Integer(1) , dist.get(3));
39 assertEquals(new Integer(1) , dist.get(4));
40 assertEquals(new Integer(1) , dist.get(5));
41 assertEquals(new Integer(1) , dist.get(6));
42 assertEquals(new Integer(1) , dist.get(7));
43 assertEquals(new Integer(1) , dist.get(8));
44 assertEquals(new Integer(1) , dist.get(9));
45 assertEquals(new Integer(1) , dist.get(10));
46 }
47
48 @Test
49 public void test2() {
50 histogram.setValues(Arrays.asList(10,10,10,10,10,20,21,23,25,27,30));
51
52 Map<Integer,Integer> dist = histogram.getDistribution();
53
54 assertEquals(null , dist.get(0));
55 assertEquals(new Integer(5) , dist.get(1));
56 assertEquals(new Integer(5) , dist.get(2));
57 assertEquals(new Integer(1) , dist.get(3));
58 assertEquals(null , dist.get(4));
59 assertEquals(null , dist.get(5));
60 assertEquals(null , dist.get(6));
61 assertEquals(null , dist.get(7));
62 assertEquals(null , dist.get(8));
63 assertEquals(null , dist.get(9));
64 assertEquals(null , dist.get(10));
65 }
66
67}
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。