遠き君へ

〜インターネットの最果てで自分語りを垂れ流すブログ〜

Javaのメソッド参照はメソッド呼び出しをチェーンしてても使える

なぜか勘違いしていたシリーズ第2弾。

基本的にメソッド参照で書けるときはメソッド参照で書きたい派(文字列あたりの情報量が多くなることが多いから)なのですが、
なぜか、「メソッド呼び出しをチェーンした時点でメソッド参照は使えない」と今まで勘違いしてました。

でも、最後のメソッド呼び出しがメソッド参照の条件を満たしてさえいればメソッド参照使えます。

import java.util.*;
import java.lang.*;

public class Main {
    public static void main(String[] args) {
    System.out.println("---------- start1 ----------");
    // 乱数(一桁の非負整数)から素数だけを抽出
    new Random().ints(10, 0, 10)
        .filter(i -> Arrays.asList(2, 3, 5, 7).contains(i)) // ラムダ式
            .forEach(System.out::println);

    System.out.println();
    System.out.println("---------- start2 ----------");
    // 上はこうも書ける
    new Random().ints(10, 0, 10)
        .filter(Arrays.asList(2, 3, 5, 7)::contains)    // メソッド参照
            .forEach(System.out::println);
    }
}

System.out::printlnは今までも普通に使ってたのに気づかなかったなぁ。。。

これで「うおーーもっとメソッド参照使える箇所増えるのでは???」と思ったんですが、
最後のメソッド呼び出しが引数1つでそれがストリームの要素、ってわりと条件きついから
あんまり増えませんでしたね。。。(今見てる範囲だと例で使ったcontains()filter()系くらいか。。。)

あと引数0のパターンだと、これは確かにメソッド呼び出しがチェーンした時点で成立することはない、であってるかな?

プリミティブ型の配列はジェネリクスの型引数に使える

Javaではジェネリクスの型引数にプリミティブ型が使えないというのは基本中の基本だと思いますが、
プリミティブ型の配列 は使うことができます。

import java.util.*;

public class Main {
    public static void main(String[] args) {
        Optional<Integer> integerOpt = Optional.of(1);
        System.out.println("Optional<Integer>: " + integerOpt);
        // -> Optional<Integer>: Optional[1]
        
        // Optional<int> intOpt = Optional.of(1);
        // -> コンパイルエラー
        
        Optional<Integer[]> integerArrayOpt = Optional.of(new Integer[]{1, 2});
        System.out.println("Optional<Integer[]>: " + integerArrayOpt.map(Arrays::toString));
        // -> Optional<Integer[]>: Optional[[1, 2]]
        
        Optional<int[]> intArrayOpt = Optional.of(new int[]{1, 2, 3});
        System.out.println("Optional<int[]>: " + intArrayOpt.map(Arrays::toString));
        // -> Optional<int[]>: Optional[[1, 2, 3]]
    }
}

今まで使えないんだと思い込んでましたが、
配列はObjectを継承している *1 ので、まぁ当然っちゃ当然なのでした。。。

(Javaにおいて配列は、今や基本的に非推奨だと思うし、文法とか扱いが特殊だから、
使うときいつもググってる。。。)

「本を読む理由」について本を読まない人間が考えること、など

「なぜ読書をしなければいけないのか?」について先日以下のツイートがRTで回ってきた。

私は児童書以降はあまり本を読んでいない人間だ。
(インターネットという無限に文章が読める媒体に出会ってしまい本を読まなくなってしまった)

私にとっての「本を読む理由」はおそらく「他人や世界について知るため」だ。

「他人や世界について知る」というのは、「他人が知っていることを知る」ということ、
もっと言うと「他人と共有できるものを持つ」ということだ。
他人と共有できるものがないと、社会生活の難易度はあがってしまう。
だから、コミュニケーションの手段として、「本を読むことは有意義」だ、と私は位置付けているのだと思う。

そういう意味では、アニメや他のテレビ番組を見る理由も「他人や世界について知るため」だ。
美術館に行くのも、動物園・水族館に行くのも同じだ。
マンガは、少し程度は下がるがそれでも「他人や世界について知るため」の割合が大きいと思う。

音楽になってくると、「純粋に自分の楽しみのため」の割合が上がってくるように思う。
(それでも「他人や世界について知るため」の割合もゼロではない)

インターネットでイラストを見ることだったら、これは完全に「純粋に自分の楽しみのため」だな。

「他人や世界について知るため」にやっていることは、正直、義務感で、楽しくなくてもやろうとしてしまう。
それで余計に「楽しくないな」「好きじゃないな」という印象を強めてしまっていて、
良くない兆候だと思う。
だけど、他人と共有できる趣味がなかなかないのよな。
これが今自分が抱えている問題のひとつ。

* * *

以前「本を読むことは、他者とのコミュニケーション欲を満たしうる」と言っている人がいた。
コミュニケーションを、「他人や世界について知る」手段、と位置付けるなら、それも納得できるかもしれない。
(おそらくその人の感覚はまた別なのだろうけど)

* * *

子供の頃は、本を読んでいる間はその内容に没頭できたのだが、
最近は「これはあの人の言っていたことと同じだろうか」「この意見について、あの人はこう思うんだろうな」などといった、
「他者の視点」「他者の声」みたいなものが絶えず割り込んできて、読む楽しみを阻害してくる。

これは何かの病気や障害なのか、あるいは現代人の多くが患っている症状なのか。
これも今抱えている問題。(どうしたらいいんだろう)

AWSの予算の作成画面の誤訳

AWSのBilling Management Consoleの「予算の作成」画面の入力項目に、
「コストまたは使用料を選択」ってありますけど、
英語だと「Select cost or usage」なので、
「コストまたは使用を選択」の誤訳(誤字?)ですよねー https://console.aws.amazon.com/billing/home#/createbudget

f:id:tookikimie:20170416155243p:plain

ユーザーガイドの方はちゃんと使用になってるのに。。。
予算の作成 - AWS 請求情報とコスト管理

「コストと使用料って何が違うの?!?!」って一瞬なってしまいましたよ

こういうのってどこにお問い合わせすればいいんですかねー

background image is created by Niellyn & bhsav.