Javaエンジニア養成読本 - 4日目
画像貼り付けなくても、編集方法をはてな記法モードにすればコードが貼れることがわかった。
見たままモードでもその機能あってもいいような気もするけど。
特集2 [マルチコアCPU対応] Java SE 8時代のデータ処理入門
第1章 内部イテレーション事始め
今まで。
import java.util.*; public class SampleClass { public static void main(String... args) { List<String> strings = new ArrayList<>(Arrays.asList("a", "b")); strings.add("c"); for (Iterator<String> i = strings.iterator(); i.hasNext();) { String s = i.next(); System.out.println(s); } for (String s : strings) { System.out.println(s); } } }
内部イテレーション。処理が多い場合は処理を外に出せるというメリットがあるのかな。
可読性や保守性が上がりそう。
import java.util.*; import java.util.function.Consumer; public class SampleClass { public static void main(String... args) { List<String> strings = new ArrayList<>(Arrays.asList("a", "b")); strings.add("c"); strings.forEach( new Consumer<String>() { @Override public void accept(String s) { System.out.println(s); } } ); } }
内部イテレーションで要素を削除
import java.util.*; import java.util.function.Predicate; public class SampleClass { public static void main(String... args) { List<String> strings = new ArrayList<>( Arrays.asList("a", "b", "1234567890A") ); strings.add("c"); strings.add("A0987654321"); strings.removeIf( new Predicate<String>() { @Override public boolean test(String s) { return s.length() > 10; } } ); System.out.println(strings); } }
「縦の問題」という言い方は知らなかった。
第2章 「縦の問題」を解決するラムダ式
import java.util.*; public class SampleClass { public static void main(String... args) { List<String> strings = new ArrayList<>(Arrays.asList( "a", "b", "01234567890", "c", "abcdefghijk" )); strings.forEach( (String s) -> { System.out.println(s); } ); strings.forEach( (s) -> { System.out.println(s); } ); strings.forEach( s -> { System.out.println(s); } ); strings.forEach(s -> System.out.println(s)); strings.removeIf(s -> s.length() > 10); System.out.println(strings); } }
匿名クラスとラムダ式の違いは、ラムダ式は新たなスコープを作らないということ。
既に宣言された変数と同じ名前の変数を定義できない。
public class SampleClass { public static void main(String... args) { SampleClass sampleClass = new SampleClass(); sampleClass.print_anonymous(); sampleClass.print_lambda(); } void print_anonymous() { Runnable r = new Runnable() { @Override public void run() { System.out.println(this); } }; r.run(); } void print_lambda() { Runnable r = () -> System.out.println(this); r.run(); } public String toString() { return "SampleClass#toString"; } }
メソッド参照
import java.util.*; public class SampleClass { public static void main(String... args) { List<String> strings = Arrays.asList("a", "b", "c"); strings.forEach(s -> System.out.println(s)); strings.forEach(System.out::println); } }
コンストラクタ参照はどういう使い方だろうか。
今日の感想
サンプルコードでは、なるほど、と思うのだが、生きたコードではどうなのだろうか、と思う。
どういう場面で効果的に使えるのか?というところがわからない。
何かアプリを作ってみればよいのだろうが、何も思い浮かばない。