Bean型のリストから特定のフィールドを抜き出して、Integer型リストに変換する

package trial;

import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;

public class Loop {

    public static void main(String[] args) {

        /******************************************
         * ループ処理いろいろ
         *  HogeBean型のリストから、Integer型のリストを作る
         *  HogeBean
         *  - private int id
         *  - private String password;
         *  - String name;
         ******************************************/

        List<Integer> idList;
        List<HogeBean> hogeList = new ArrayList<HogeBean>();

        int cnt = 0;
        while (cnt < 5) {
            HogeBean hogeBean = new HogeBean();
            hogeBean.setId(cnt);
            hogeList.add(hogeBean);
            cnt++;
        }

        /********************
         * Java5より前の場合
         ********************/
        // 普通のfor文
        idList = new ArrayList<Integer>();
        for (int i = 0; i < hogeList.size(); i++) {
            idList.add(hogeList.get(i).getId());
        }

        /********************
         * Java6 ~ Java7の場合
         ********************/
        // 拡張for文
        idList = new ArrayList<Integer>();
        for (HogeBean hogeBean : hogeList) {
            idList.add(hogeBean.getId());
        }

        /********************
         *    Java8の場合
         ********************/
        // Stream ラムダ式
        idList = hogeList.stream().map(hogeBean -> hogeBean.getId()).collect(Collectors.toList());

        // Stream コロコロ式
        idList = hogeList.stream().map(HogeBean::getId).collect(Collectors.toList());
    }
}

【Visual Studio Code】 プロジェクトを複数開く

Visual Studio Codeでプロジェクト(フォルダ)を複数開く方法 ~

1. バージョン 1.12.1 win版
f:id:hatehate_masaki:20170515232204p:plain

2. プロジェクト(フォルダ)を複数開く
ctr + shift + n

論理的思考テスト【回答】

Javaで思いついたまま書きました。
ダメだし、他の方法、他の言語での回答、お待ちしています。^^

package main.java;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Random;

public class Logical {

    /*
     * 9つの鉄球の中から、重さの異なる1つの鉄球を、天秤を3回だけ使って
     * 特定せよ。
     */
    public static void main(String[] args) {

        /*
         * 1つのだけ重さの異なる9つの鉄球を準備する。
         */
        ArrayList<Integer> array = new ArrayList<Integer>();

        Random rnd = new Random();
        int onlyNum = rnd.nextInt(10);
        int standardNum = rnd.nextInt(10);

        while (standardNum == onlyNum) {
            // 標準とは異なる重さの鉄球を入れる
            onlyNum = rnd.nextInt(10);
        }

        int cnt = 0;
        while (cnt < 8) {
            // 8個の標準の重さの鉄球を入れる
            array.add(standardNum);
            cnt++;
        }
        // 1個の重さの異なる鉄球を入れる
        array.add(onlyNum);
        // シャッフル
        Collections.shuffle(array);

        // 中身を表示
        cnt = 0;
        while (cnt < 9) {
            System.out.print(array.get(cnt) + " ");
            cnt++;
        }

        /*
         * 9つの鉄球の中から、重さの異なる1つの鉄球を、天秤を3回だけ使って
         * 特定する処理
         */
        int ans;
        ArrayList<Integer> groupA = new ArrayList<Integer>();
        ArrayList<Integer> groupB = new ArrayList<Integer>();
        ArrayList<Integer> groupC = new ArrayList<Integer>();
        for (int cnt3 = 0; cnt3 < 3; cnt3++) {
            // 0, 1, 2
            groupA.add(array.get(cnt3));
            // 3, 4, 5
            groupB.add(array.get(cnt3 + 3));
            // 6, 7, 8
            groupC.add(array.get(cnt3 + 6));
        }
        int totalA = groupA.get(0) + groupA.get(1) + groupA.get(2);
        int totalB = groupB.get(0) + groupB.get(1) + groupB.get(2);
        int totalC = groupC.get(0) + groupC.get(1) + groupC.get(2);

        // 【1回目】 ・・・ グループAとグループBを天秤にかける
        if (totalA == totalB) {
            // つりあった場合は、重さの違う鉄球はグループCにいる
            int groupC_a = groupC.get(0);
            int groupC_b = groupC.get(1);
            int groupC_c = groupC.get(2);
            // 【2回目】
            if (groupC_a == groupC_b) {
                // つりあった場合は、重さの違う鉄球は、groupC_cです。
                ans = groupC_c;
            } else {
                // 不釣り合いの場合は、重さの違う鉄球は、groupC_aかgroupC_bです。
                // 【3回目】
                if (groupC_c == groupC_a) {
                    ans = groupC_b;
                } else {
                    ans = groupC_a;
                }
            }
        } else {
            // 不釣り合いの場合は、重さの違う鉄球はグループAかグループBにいる
            // Ptn1 グループA > グループB ・・・ Aに重い鉄球がいるか、Bに軽い鉄球がいる
            // Ptn2 グループA < グループB ・・・ Aに軽い鉄球がいるか、Bに重い鉄球がいる
            // 1回目の天秤測定で、Pnt1かPnt2かは分かっている。

            if (totalA > totalB) {
                // Pnt1の場合 ・・・ Aに重い鉄球がいるか、Bに軽い鉄球がいる
                // 【2回目】
                if (totalC == totalA) {
                    // つりあった場合は、重さの違う鉄球は、グループBにいる
                    int groupB_a = groupB.get(0);
                    int groupB_b = groupB.get(1);
                    int groupB_c = groupB.get(2);
                    // 【3回目】
                    if (groupB_a == groupB_b) {
                        // このルートはPtn1なので、これは軽い鉄球
                        ans = groupB_c;
                    } else {
                        // このルートはPtn1なので、3回目の計測で軽かった方が重さの違う1つの鉄球
                        ans = groupB_a > groupB_b ? groupB_b : groupB_a;
                    }
                } else {
                    // 不釣り合いの場合は、重さの違う鉄球は、グループAにいる
                    int groupA_a = groupA.get(0);
                    int groupA_b = groupA.get(1);
                    int groupA_c = groupA.get(2);
                    // 【3回目】
                    if (groupA_a == groupA_b) {
                        // このルートはPtn1なので、これは重い鉄球
                        ans = groupA_c;
                    } else {
                        // このルートはPtn1なので、3回目の計測で重かった方が重さの違う1つの鉄球
                        ans = groupA_a > groupA_b ? groupA_a : groupA_b;
                    }
                }
            } else {
                // Pnt2の場合 ・・・ Aに軽い鉄球がいるか、Bに重い鉄球がいる
                // 【2回目】
                if (totalC == totalA) {
                    // つりあった場合は、重さの違う鉄球は、グループBにいる
                    int groupB_a = groupB.get(0);
                    int groupB_b = groupB.get(1);
                    int groupB_c = groupB.get(2);
                    // 【3回目】
                    if (groupB_a == groupB_b) {
                        // このルートはPtn2なので、これは重い鉄球
                        ans = groupB_c;
                    } else {
                        // このルートはPtn2なので、3回目の計測で重かった方が重さの違う1つの鉄球
                        ans = groupB_a > groupB_b ? groupB_a : groupB_b;
                    }
                } else {
                    // 不釣り合いの場合は、重さの違う鉄球は、グループAにいる
                    int groupA_a = groupA.get(0);
                    int groupA_b = groupA.get(1);
                    int groupA_c = groupA.get(2);
                    // 【3回目】
                    if (groupA_a == groupA_b) {
                        // このルートはPtn2なので、これは軽い鉄球
                        ans = groupA_c;
                    } else {
                        // このルートはPtn2なので、3回目の計測で軽かった方が重さの違う1つの鉄球
                        ans = groupA_a < groupA_b ? groupA_a : groupA_b;
                    }
                }
            }
        }
        // 重さの違う鉄球はこれです。
        System.out.println("\r\nAnser : " + ans);
    }
}

論理的思考テスト

ある会社のプログラマ採用試験の問題らしく、論理的な思考が出来る人と出来ない人では、開発時間に7倍の差が出るとかでないとか。
プログラマに論理的思考は必須だとか、プログラミングはセンスだとか言うのはあまり好きではないのですが、
気になって解いてみたので問題と回答を載せてみます。

【問題】
9つの玉があります。
ひとつだけ重さの違う玉があります。
天秤測りを3回だけ使って、重さの違う玉を見つける手順を示しなさい。

論理的思考力テスト【解答つき】 − @ITクラブ Cafe − @IT

【回答(コード)】
http://hatehate-masaki.hatenablog.com/entry/2017/03/12/045915

Eclipse エラー・ログの解析

本エントリーでは、eclipseのエラー・ログ ビューに出たエラーを解析していきます。
根本原因までは分かっておらず、発生している原因を特定するところまでの内容となります。
C:\Program Files (x86)\Gow\bin\which.exe: no git in
f:id:hatehate_masaki:20170131225521p:plain

環境

  • Neon.2 Release (4.6.2) win版

発生契機

このエラーで困っていること

  • 特になし


目次

  • エラーをダブルクリックして詳細を確認する
  • which.exeを試してみる
  • 解析結果


手順
1. エラーをダブルクリックして詳細を確認する
f:id:hatehate_masaki:20170131230941p:plain
メッセージの内容をよく見てみると、以下のように読み取れます。
C:\Program Files (x86)\Gow\bin\which.exeを実行したが、no git inである。
(.;c:\pleiades\eclipse\jre\jre\bin\server;c:\pleiades\eclipse\jre\jre\bin;c:\pleiades\eclipse\jre\jre\lib\amd64;c:\Program Files (x86)\Intel\iCLS Client\;c:\Program Files\Intel\iCLS Client\;c:\Windows\system32;c:\Windows;c:\Windows\System32\Wbem;c:\Windows\System32\WindowsPowerShell\v1.0\;c:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL;c:\Program Files\Intel\Intel(R) Management Engine Components\DAL;c:\Program Files (x86)\Intel\Intel(R) Management Engine Components\IPT;c:\Program Files\Intel\Intel(R) Management Engine Components\IPT;C:\Program Files (x86)\Gow\bin;c:\Program Files\Intel\WiFi\bin\;c:\Program Files\Common Files\Intel\WirelessCommon\;c:\Users\AppData\Local\Microsoft\WindowsApps;.;c:\pleiades\eclipse;.)

つらつら何かのディレクトリが書いてあるが、要はwhich.exeを実行している模様。


2. which.exeを試してみる
何故、私がこの間インストールしたGoweclipseが参照しているのかは謎であるが、
コマンドプロンプトでwhich.exeを実行してみます。
GowコマンドプロンプトでUNIXコマンドを使う。【Gow】 - hatehate_masaki’s blog

f:id:hatehate_masaki:20170201001808p:plain
whichは、引数に指定した値のフルパスを返すコマンドのようです。
4行目:Write the full path of COMMAND(s) to standard output.
"COMMAND(s)の完全なパスを標準出力に書き出します。"

そして、which git で実行すると、eclipseのビューに出たエラーと同じです。
どうやらeclipseが起動の際にGowでコマンドを叩いていたようです。
f:id:hatehate_masaki:20170201001755p:plain


3. 解析結果
おそらく、gitをインストールして、環境変数の設定からパスを通せばこのエラーは出なくなると思われる。


終わり。



追記
eclipseのログを確認する
 困ったときは以下のログも見てみると何か分かるかもしれないです。
 C:\pleiades\workspace\.metadata\.log

Eclipse ダークテーマ 設定まとめ

・完成イメージ
f:id:hatehate_masaki:20170118225428p:plain


本エントリーでは、Eclipseを黒基調にする手順、黒基調に適した設定を記載します。

トピック

  • ダークテーマに変更する
  • エクスプローラまたはナビゲータ内の文字色を見やすい色に変更する
  • お洒落なシンタックスハイライトを設定する
  • コミット前の差分ファイルが背景色と同化して見えないのを解消する
  • 見やすいフォントに変更する


以下、設定の手順を記載していきます。
EclipseのバージョンはNeon.2 Release (4.6.2) win版とします。

  1. 外観をダークテーマに変更する
  2. 色テーマを変更する
  3. ダークテーマ設定時に読み込んでいるCSSを修正する
  4. GitまたはSVNのコミット前ファイルの文字色を変更する
  5. 文字フォント、サイズを変更する


1. 外観をダークテーマに変更する
ウィンドウ → 設定 → 一般 → 外観 からダークテーマに変更する。
f:id:hatehate_masaki:20170118232535p:plain


2. 色テーマを変更する
ウィンドウ → 設定 → 一般 → 外観 → 色テーマ からSublime Text2に変更する。
f:id:hatehate_masaki:20170118233005p:plain


3. ダークテーマ設定時に読み込んでいるCSSを修正する。(設定後は-clean.cmdで再起動)
C:/pleiades/eclipse/plugins/org.eclipse.ui.themes_1.1.300.v20161107-1827/css/e4-dark_win.css

「変更前」
##########
CTabFolder Tree, CTabFolder Canvas {
background-color: #2F2F2F;
/* 灰色 */
color: #CCC;
}
##########
「変更後」
##########
CTabFolder Tree, CTabFolder Canvas {
background-color: #2F2F2F;
/* 肌色 */
color: #ffdf7f;
}
##########


4. GitまたはSVNのコミット前ファイルの文字色を変更する
ウィンドウ → 設定 → 一般 → 外観 → 色とフォント → Git
f:id:hatehate_masaki:20170118234606p:plain


5. 文字フォントを変更する
ウィンドウ → 設定 → 一般 → 外観 → 色とフォント からテキスト・フォントをConsolas, 10pxに変更する。
f:id:hatehate_masaki:20170118234235p:plain



追記。
######################################
1. コメント文字色
2. コンソールの文字色
3. プロポーザルの色
4. "class"フォルダの色
5. スクロールバーをデフォルトにする

1. コメント文字色
構文の色指定で、java, js, CSS, HTML, JSP, XMLのコメント文字色を設定する。

[設定値]
java, CSS : 白 rgb(255, 255, 255)
js, JSP, HTML, XML : 薄グレー rgb(227, 227, 227) 白だとコンテンツと同化するため

[手順]
java : ウィンドウ → 設定 → java → エディタ → 構文の色指定

  • javadoc : その他
  • コメント : タスク・タグ、一行コメント、複数行コメント

CSS : ウィンドウ → 設定 → Web → CSSファイル → エディタ → 構文の色指定

  • コメント : 前景

js : ウィンドウ → 設定 → JavaScript → エディタ → 構文の色指定

  • JSdoc - その他
  • コメント - タスク・タグ、一行コメント、複数行コメント

JSP : ウィンドウ → 設定 → Web → JSPファイル → エディタ → 構文の色指定

  • コメント区切り、コメント内容

HTML : ウィンドウ → 設定 → Web → HTMLファイル → エディタ → 構文の色指定

  • コメント区切り、コメント内容

XML : ウィンドウ → 設定 → XMLXMLファイル → エディタ → 構文の色指定

  • コメント区切り、コメント内容


2. コンソールの文字色
[設定値]
白 rgb(255, 255, 255)

[手順]
ウィンドウ → 設定 → 実行/デバック → コンソール → 標準エラーテキスト


3. プロポーザルの色変更
css, HTMLファイルのコード補完ウィンドウの色を、デフォルトだと黒背景に黒文字で見にくいので変更する。
[設定値]
コンプリート機能によるプロポーザルの背景色:薄黒 rgb(227, 227, 227)
コンプリート機能によるプロポーザルの前景色:グレー rgb(47, 47, 47)

[手順]
ウィンドウ → 設定 → 一般 → エディタ → 構造化テキスト・エディター


4. "class"フォルダの色を他と同様、肌色に変更
[設定値]
無視するリソース(前景):肌色 rgb(255, 223, 127)

[手順]
ウィンドウ → 設定 → 一般 → 外観 → 色とフォント → GitまたはSVN


5. スクロールバーをデフォルトにする
C:/pleiades/eclipse/plugins/org.eclipse.ui.themes_1.1.300.v20161107-1827/css/e4-dark_win.css

###
StyledText {
swt-scrollbar-themed: false;
swt-scrollbar-background-color: #383838;
swt-scrollbar-foreground-color: #494949;
swt-scrollbar-width: 4px;
swt-scrollbar-border-radius: 4px;
swt-scrollbar-mouse-near-scroll-width: 15px;
}
###

######################################



以上。

コマンドプロンプトでUNIXコマンドを使う。【Gow】

コマンドプロンプトUNIXコマンドを使えるようにする方法

ls, mv, cat, tail, grepなど100種類のコマンドに対応する、Gowというツールを導入します。
同様なツールでCygwinがありますが、より手軽で軽量です。

[導入手順]

1. exeを任意の場所に配置して、すべて「はい」でインストールする。
https://github.com/bmatzelle/gow/releases/download/v0.8.0/Gow-0.8.0.exe

2. ユーザの環境変数を追加する。
f:id:hatehate_masaki:20170113023926p:plain

3. 設定ファイル配置
C:/Users/xxxx/gow配下に以下のファイルを作成して配置して下さい。

.bashrc

###
export PS1='\h:\w\$ '
export LC_CTYPE=ja_JP.UTF-8
export EDITOR=vi
alias vi='vim'
alias ls='ls -F'
alias ll='ls -laF'
alias ls='ls --show-control-chars'
###


.inputrc

###
set convert-meta off
set meta-flag on
set output-meta on
set mark-directories off
###


.vimrc

###
set fileencodings=guess,utf-8,iso-2022-jp-3,euc-jisx0213,euc-jp,ucs-bom
set fileencoding=utf-8
set fileformats=dos,unix,mac
set fileformat=unix
set shell=bash
###



[使い方]

1. コマンドプロンプトを実行する

2. bash [Enterキー]

3.UNIXコマンドが使えるようになる。shファイルはbash aaa.shで実行する。

こんな感じです。
f:id:hatehate_masaki:20170113030448p:plain


※以下、使用可能コマンド一覧
############
awk, basename, bash, bc, bison, bunzip2, bzip2, bzip2recover, cat,
chgrp, chmod, chown, chroot, cksum, clear, cp, csplit, curl, cut, dc,
dd, df, diff, diff3, dirname, dos2unix, du, egrep, env, expand, expr,
factor, fgrep, flex, fmt, fold, gawk, gfind, gow, grep, gsar, gsort,
gzip, head, hostid, hostname, id, indent, install, join, jwhois, less,
lesskey, ln, ls, m4, make, md5sum, mkdir, mkfifo, mknod, mv, nano,
ncftp, nl, od, pageant, paste, patch, pathchk, plink, pr, printenv,
printf, pscp, psftp, putty, puttygen, pwd, rm, rmdir, scp, sdiff, sed,
seq, sftp, sha1sum, shar, sleep, split, ssh, su, sum, sync, tac, tail,
tar, tee, test, touch, tr, uname, unexpand, uniq, unix2dos, unlink,
unrar, unshar, uudecode, uuencode, vim, wc, wget, whereis, which,
whoami, xargs, yes, zip
############



以上。