teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

5

追記

2019/01/18 10:44

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
@@ -33,10 +33,11 @@
33
33
  3.5
34
34
  ```
35
35
 
36
+ おまけ
36
37
  ---
37
- 遊び。[Wandbox](https://wandbox.org/permlink/Z1eURC9Rzduaykpf)
38
+ 遊び。[Wandbox](https://wandbox.org/permlink/sUXxKujzSuKDdmYS)
38
39
  ```Java
39
- List<Double> data = IntStream.iterate(0, pre -> pre+chunkSize)
40
+ var data = IntStream.iterate(0, pre -> pre+chunkSize)
40
41
  .takeWhile(val -> val < src.size())
41
42
  .mapToDouble(
42
43
  val -> src.subList(val, val+chunkSize).stream()
@@ -48,4 +49,26 @@
48
49
  .boxed()
49
50
  .collect(Collectors.toList())
50
51
  ;
52
+ ```
53
+
54
+ ---
55
+ 遊び2。[Wandbox](https://wandbox.org/permlink/rHzztOxTuGLvFx9B)
56
+ - リストsumsを追加
57
+ - collectしたリストの可変性を保証
58
+
59
+ ```Java
60
+ var sums = IntStream.iterate(0, pre -> pre + chunkSize)
61
+ .takeWhile(n -> n < src.size())
62
+ .mapToDouble(
63
+ val -> src.subList(val, val + chunkSize).stream()
64
+ .mapToDouble(n -> n)
65
+ .sum()
66
+ )
67
+ .boxed()
68
+ .collect(Collectors.toCollection(ArrayList::new))
69
+ ;
70
+ var data = sums.stream()
71
+ .map(val -> val / chunkSize)
72
+ .collect(Collectors.toCollection(ArrayList::new))
73
+ ;
51
74
  ```

4

修正

2019/01/18 10:43

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
@@ -34,14 +34,15 @@
34
34
  ```
35
35
 
36
36
  ---
37
- 遊び。
37
+ 遊び。[Wandbox](https://wandbox.org/permlink/Z1eURC9Rzduaykpf)
38
38
  ```Java
39
- List<Double> data = IntStream.iterate(0, val -> val < src.size(), pre -> pre+chunkSize)
39
+ List<Double> data = IntStream.iterate(0, pre -> pre+chunkSize)
40
+ .takeWhile(val -> val < src.size())
40
41
  .mapToDouble(
41
42
  val -> src.subList(val, val+chunkSize).stream()
42
43
  .mapToDouble(n -> n)
43
44
  .average()
44
- .orElse(0.)
45
+ .getAsDouble()
45
46
  )
46
47
  //.peek(System.out::println)
47
48
  .boxed()

3

追記

2019/01/18 10:20

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
@@ -31,4 +31,20 @@
31
31
  ```
32
32
  1.5
33
33
  3.5
34
+ ```
35
+
36
+ ---
37
+ 遊び。
38
+ ```Java
39
+ List<Double> data = IntStream.iterate(0, val -> val < src.size(), pre -> pre+chunkSize)
40
+ .mapToDouble(
41
+ val -> src.subList(val, val+chunkSize).stream()
42
+ .mapToDouble(n -> n)
43
+ .average()
44
+ .orElse(0.)
45
+ )
46
+ //.peek(System.out::println)
47
+ .boxed()
48
+ .collect(Collectors.toList())
49
+ ;
34
50
  ```

2

修正

2019/01/18 10:13

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
@@ -1,17 +1,34 @@
1
1
  dataはともかく、sumをリストにする必要は無いのでは。
2
2
  ```Java
3
- // 名前が分かりづらいので、data2の名前はsrcに変更
3
+ import java.util.*;
4
4
 
5
- final int chunkSize = 2;
6
- assert src.size() % chunkSize == 0: "分割幅が不適切";
7
5
 
6
+ class Main {
7
+ public static void main(String[] args) {
8
- List<Double> data = new ArrayList<>();
8
+ List<Double> src = List.of(1.0, 2.0, 3.0, 4.0);
9
- for (int k = 0; k < src.size(); k += chunkSize) {
9
+
10
- double sum = 0;
10
+ final int chunkSize = 2;
11
+ assert src.size() % chunkSize == 0: "分割幅が不適切";
11
12
 
13
+ List<Double> data = new ArrayList<>();
14
+ for (int i = 0; i < src.size(); i += chunkSize) {
15
+ double sum = 0;
16
+
12
- for (int i = 0; i < chunkSize; i++) {
17
+ for (int j = 0; j < chunkSize; ++j) {
13
- sum += src.get(i+k);
18
+ sum += src.get(i+j);
14
- }
19
+ }
15
- data.add(sum / chunkSize);
20
+ data.add(sum / chunkSize);
21
+ }
22
+
23
+ for(double e: data) {
24
+ System.out.println(e);
25
+ }
26
+ }
16
27
  }
28
+ ```
29
+
30
+ **実行結果** [Wandbox](https://wandbox.org/permlink/XOEcc7ZrDpvO4Fud)
31
+ ```
32
+ 1.5
33
+ 3.5
17
34
  ```

1

追記

2019/01/18 09:54

投稿

LouiS0616
LouiS0616

スコア35678

answer CHANGED
@@ -2,9 +2,10 @@
2
2
  ```Java
3
3
  // 名前が分かりづらいので、data2の名前はsrcに変更
4
4
 
5
- List<Double> data = new ArrayList<>();
6
5
  final int chunkSize = 2;
6
+ assert src.size() % chunkSize == 0: "分割幅が不適切";
7
7
 
8
+ List<Double> data = new ArrayList<>();
8
9
  for (int k = 0; k < src.size(); k += chunkSize) {
9
10
  double sum = 0;
10
11