回答編集履歴

1

旧来の書き方

2016/05/13 14:36

投稿

swordone
swordone

スコア20651

test CHANGED
@@ -7,3 +7,45 @@
7
7
 
8
8
 
9
9
  で、この「何かをする」というものに、Listは自分の持っているオブジェクトを順番に送るのです。この場合、Listが持っている"Pochi", "kenta", "Chiro"を順番に「何か」、つまりSystem.out.printlnという行動をすることになります。
10
+
11
+
12
+
13
+ この書き方をせず、旧来の書き方で書くとするならこうなります。
14
+
15
+ ```java
16
+
17
+ dogs.forEach(new Consumer<Object>{ //Listの型であるStringか、その親クラス、インタフェースの型のConsumerである必要がある
18
+
19
+ @Override
20
+
21
+ public void accept(Object o){ //「何かをする」メソッド
22
+
23
+ System.out.println(o); //内容が1文で、かつacceptに渡る引数がそのまま渡る場合に、メソッド参照で書ける
24
+
25
+ }
26
+
27
+ });
28
+
29
+ ```
30
+
31
+ で、forEachでどうなっているかというと、イメージですが、
32
+
33
+ ```java
34
+
35
+ //List内部
36
+
37
+ public void forEach(Consumer<? super String> action){
38
+
39
+ for(String s : this){
40
+
41
+ action.accept(s); //「何かをする」Consumerに自分のリストの中身を順番に渡す
42
+
43
+ }
44
+
45
+ }
46
+
47
+ ```
48
+
49
+ つまり、Listの中身を順番に取り出し、まずConsumerオブジェクトのacceptメソッドに渡ります。
50
+
51
+ そして、acceptメソッドで受け取ったオブジェクトをSystem.out.printlnメソッドに渡して出力します。