ゴリラでもわかるエンジニアライフ

マイケル(子ゴリ)君とともにみなさんの成長のためにあるブログです

【エンジニア初心者必見】<Java8>Collectionの相互変換まとめ

&lt;Java8&gt;Collectionの相互変換まとめ

さばみそ君、Javaの勉強をしてるんだけど、Collectionsクラスの変換がよくわからないんだ

なるほどね!マイケル君
じゃあ、Collectionsクラスの変換方法をまとめておくから、これを勉強しておくといいよ

こんにちは。どうもさばみそです!

今回は、プログラミングを独学で学ばれている方やプログラミング初心者で将来プログラマーになりたいという方のために、JavaのCollectionsクラスの変換方法をまとめたいと思います。

※自分のための備忘としても書いています。。。笑

Collectionとは

まずCollectionとは、公式ドキュメントによるとこう書かれています

コレクション階層のルート・インタフェースです。コレクションは、その要素であるオブジェクトのグループを表します。
コレクションによっては要素の重複を許可しますが、許可しないコレクションもあります。
また、順序付けられているコレクションとそうでないコレクションがあります。

ふむふむ。。なるほど。。なんのこっちゃって感じですよね

まあ、簡単に説明するとCollection(コレクション)は、ListやSet、Mapなどが継承している大元のインターフェースであるとことです。

そして、Collectionを継承しているのは、以下のものになります。

  • Set
  • List
  • Map
  • Arrays
  • HashSet

全てを列挙すると多くなってしまうので、今回は代表的なものだけをあげてます。 詳しく知りたい人は、下記の公式リファレンスを見てみるとわかりやすいです

Java8 Collection

ちなみに、よく使われるHashMapは、Collectionを継承しているわけではなく、実は直接、Objectを継承しているのでパッケージが違います。

配列からリストへの変換

ではまず、配列からリストへの変換を行いたいと思います。

String[] stringArray = { "あ", "いい", "うぅ", "エー", "オウフ" };

このような配列があった場合、変換に使うものは、ArraysクラスのasListメソッドです

asListとは、指定された配列に連動する固定サイズのリストを返します。

List<String> stringList = Arrays.asList(stringArray);

このようになります。

配列からリストへは、この1パターンしかありませんので、簡単ですね!

リストから配列への変換

では、逆にリストを配列に変換したい場合は、どうすれば良いでしょうか?

        List<String> strings = Arrays.asList("あ", "いい", "うぅ", "エー", "オウフ");

それは、ListクラスのtoArrayメソッドです。

toArrayとは、このリスト内のすべての要素を適切な順序で(最初の要素から最後の要素へ)含んでいる配列を返します。返される配列の実行時の型は、指定された配列の型になります。

では、変換方法はこのようになります

String[] stringArray = strings.toArray(new String[0]);

リストからセットへの変換

どんどん行きましょう! 次は、リストからセットへの変換です

        List<String> strings = Arrays.asList("あ", "いい", "うぅ", "エー", "オウフ");

今回は、今までとは変換の方法が異なります! セットへの変換は、HashSetクラスを使います!

HashSetクラスとは、このクラスは、ハッシュ表(実際にはHashMapのインスタンス)に連動し、Setインタフェースを実装します。このクラスでは、セットの反復順序について保証しません。特に、その順序を一定に保つことを保証しません。このクラスは、null要素を許容します。

簡単にいうと、HashSetクラスとは、Setを生成するためにあるクラスだということです

そのHashSetクラスのコンストラクタにHashSet(Collection<? extends E> c)というものが用意されており、引数にCollectionの要素を渡すとそれを使って、Setを生成してくれるのです!

        HashSet<String> stringSet = new HashSet<>(strings);

セットからリストへの変換

次は、反対にセットからリストへ変換を行って見ましょう

まずは、このようなセットを用意しておきます

        Set<String> strings = new HashSet<String>() {{
            add("あ");
            add("いい");
            add("うぅ");
            add("エー");
            add("オウフ");
        }};

これをリストへ変換する際に使うのは、ArrayListクラスのコンストラクタです

リストからセットへ変換したのと同じく、ArrayListクラスのコンストラクタには、ArrayList(Collection<? extends E> c)というのが用意されており、それを使いリストを生成することで、SetクラスをListクラスへ変換することができます

ArrayList(Collection<? extends E> c)とは、 指定されたコレクションの要素が含まれているリストを、要素がコレクションのイテレータによって返される順序で作成します

ということで、変換方法は、このようになります

        List<String> stringList = new ArrayList<>(strings);

リストからマップへの変換

最後に、少し難しいリストからマップへの変換方法を教えたいと思います。

特に、Java8のStream APIを活用した方法となるので、Java8以前の使われている方とは方法が異なるので注意してください。

では、まずList要素を準備します

        class Dto {
            final long id;
            final String val;
            Dto(long id, String val) {
                this.id = id;
                this.val = val;
            }

            @Override
            public String toString() {
                return String.format("Dto(%d, %s)", id, val);
            }
        }
        List<Dto> dtos = IntStream.rangeClosed(1, 10).mapToObj(id -> new Dto(id, 
UUID.randomUUID().toString())).collect(Collectors.toList());

今までと違い少し特殊な物を用意しているので、要素を解説を挟みますね

このList要素は、1から10の要素番号に、ランダムな値を格納するといった内容になります。

Dto[1] = 34551912-f2be-4896-9a8e-999367c01e93
Dto[2] = d68017ba-a7e3-41d1-9e35-876b72748282)

このように、生成される中身が10個あると思ってください。

では、それを1から10(要素番号)をKey(キー)とした、value(バリュー)に中身が格納されているMap形式へ変換したいと思います

ListからMapへ変換する際には、StreamAPIのラムダ式を書くことで、手軽に変換することができます。

説明するより、見てもらった方が早いと思いますので、こちらになります

        Map<Long, Dto> map = dtos.stream()
            .collect(Collectors.toMap(
                s -> s.id,
                s -> s
            ));

処理の流れとしては、

  1. Listをstreamにし、
  2. streamからListをCollectorに渡す
  3. toMapメソッドを使いMapへ変換する
  4. その際に、キーを要素番号として値をそれに紐づく値を指定

のように変換することができます。

まとめ

  • Collectionには、MapやList,Arrayなどがある
  • 配列からリストへは、asListメソッドを使う
  • リストから配列には、toArrayメソッドを使う
  • リストからセットは、HashSetコンストラクタを使う
  • セットからリストは、ArrayListコンストラクタを使う
  • リストからマップは、toMapメソッドを使い、ラムダ式で書くとコードがスッキリする

どうだったでしょうか?

今回は、Java8を使ったCollectionの変換方法をまとめてみました

実務でもよく使われる書き方で書いているので、ご参考になればと思います。

また、変換方法はこれ以外にもあるので、公式ドキュメントを見るなりして、調べてみるといいと思います。

皆さんの気になる話題や、書いて欲しい話題などをコメントに書いていただくと記事作成の大きな手助けとなります。

皆さんのコメントお待ちしております

Spring initilazrが初心者にめちゃくちゃ厳しかった

Spring initilazrが初心者にめちゃくちゃ厳しかった

 

お久しぶりです。

さばみそです。

 

最近、転職しました。(転職については、また別記事で書きたいと思います)

 

そこで初めて、Spring bootを触ったのですが、非常に初心者に厳しい設定だったことに気づいたので、この記事を見て少しでも、手助けになればと思い綴ります。

 

まず開発環境ですが、

Mac

 intelliJ CEを使ってました。

 

Spring initilazrを使う際、 intelliJ ultimateならそのまま initilazeできるのですが、無料版のCEなら、WebのSpring  initilazrから直接生成して、importでprojectを作ることになります

 

初めての私は、ふむふむなるほどねと、得意げに initilazeし、importして、当たり前のようにHello worldを出そうとしました。

 

だがしかし、、、、できない

エラーが出る。。。。何故だ、何もしていないはず、、、

 

そこでいろいろ調べてみると、depencyseにstarter-webが入っていない。。。。。

 

そんなことがあるのか。。。

 initilazrだぞ、、、、と思いながら、pom.mvnを見る。。。。

 

確かにない、不親切な initilazrだな、その時までは、これくらいの認識でした。

 

そこからが戦いでした

 

簡単なCRUD機能のテストを実装して、デバッグした時でした。。。

デバッグには成功して、webページへアクセスし、モデルの作成フォームへアクセスしたところ、404エラー。。。

何故だ。。。

 

Controllerが悪いのかと思ったが、マッピングもうまくいってる

そして、viewも存在する

それなのに404...

訳がわからない

 

先輩に聞いて、先輩と一緒に最初から作るも、同じくエラー。。。。意味がわからない

 

そこでわかったのが、viewで、thymeleafを使っているということ

Spring bootでは、テンプレートエンジンにJSPではなく、thymeleafを推奨しています!そう、推奨しているんです

 

だがしかし、depencyseにない。。。。

  initilazrよ、仕事をしてくれ

 initilazrという名前なのに、一式の機能が全く入ってない。。。

そんなもの初心者には気づく訳がない。。。。

 

皆さんも、SpringBootでspring initilazrを使う際、starter-webやjpa、thymleafなどが入っていることを確認して、イニシャライズしてください

 

以上、独り言のような記事でした

 

 

定時は17時と19時どっちがいいの?

定時は17時と19時どっちがいいの?

ねぇ、さばみそ君!定時って17時と19時どっちがいいの?

じゃあ、今日は定時が17時と19時のメリットとデメリットについてお話しするね!

ということで、定時は17時と19時のどっちがいいかを話していきたいと思います

就職活動や転職活動をしていると、どーしても仕事内容や給料、福利厚生を優先してしまい、 勤務時間の優先度はどうしても下がってしまいますよね! そこで、定時が17時の会社と19時の会社で働いた経験からメリットとデメリットをご紹介したいと思います。

 定時17時のメリット

  • 帰る時間が早いので、仕事が終わってから使える時間が多い
  • 大学の友人や他の会社の人たちと遊びや飲み会の時間を合わせやすい
  • アフター5(ファイブ)という割引が存在するので、お得に遊べる
  • 帰宅時間が早いので、得した気分になる

特に2番目の、早く帰れることで大学の友達との飲み会の時間を合わせやすく楽しめるのがメリットとして、大きかったです

定時17時のデメリット

  • まず、眠い
  • 始業時間も早いので、早起きしなければいけない
  • 朝の時間がなく、バタバタする
  • 通勤時間での満員電車
  • 前日の夜に、そこまで夜更かしできない

特に、定時17時の人は、満員電車や満員バスは避けては通れない。。。。 東京なんかだと、東西線の人は、苦痛。。。。

定時19時のメリット

  • 始業時間も遅いので、早起きしなくてよい
  • 満員電車に乗らなくて済む
  • 朝の時間をゆっくり使える
  • 前日もある程度の夜更かしをしても大丈夫

やはり、定時19時のメリットは、朝も遅いので、ゆっくりでき、満員電車に乗らなくても済むことが大きかったですね また、起きる時間も8時とかなので、睡眠時間が短くてもよく寝た気がしたの、精神的には楽でしたね

定時19時のデメリット

  • 帰ってから使える時間が短い
  • 大学の友達と遊ぶ時間が合わないので、遅れてから参加、もしくは嫌がられる
  • 朝も遅いので、夜遅くまで起きてしまい夜行性が常態化してしまう

実際に、定時が19時の時に、友達から誘われても、時間が合わずに遊びづらいことが多かったです。。

特に、東京だと通勤に2時間かかる子もいるので、ものすごく嫌がられます。。。(そんなに嫌がらなくてもいいのに。。。)

どっちがいいの?

結局のところ、どっちがいいの?ということですが、

私的には、定時は17時の方がいいですね!

満員電車もいやなんですが、通うと慣れます!

それよりも、友達と会う時間を調整しやすい方が、楽しみが増えるのでうれしいですね!

しかし、仕事内容などにより、妥協は全然できます!

まとめ

定時は、できることなら17時がいい!

皆さんはどちらの方がいいでしょうか?

これから働く皆さんのご参考までに紹介しました!

また、定時が17時の皆さん、定時19時の人も考慮して、飲み会を組んでください。。。。

【必見】初心者プログラマーのための学習サイトランキング

f:id:dankan-0101:20180711182950j:plain

やあ、マイケル君!今日は何を勉強しているんだい?

こんにちは さばみそ君!僕は今日からプログラマーを目指すんだ!けど、どうやって勉強すればいいかわからないよ

なるほど!じゃあ、初心者から即戦力になれるサイトを教えてあげるね!

こんにちは、さばみそです。

今日は、「エンジニアになりたいけど、どこから始めればいいかわからない」っていう人向けに、自分が活用してよかったと思うサイトを3つ紹介したいと思います。

  • 第3位 Progate
    • どんな人におすすめ?
    • 何が勉強できるの?
    • どうやって勉強するの?
    • 料金は?
    • 何が違うの?
  • 第2位 ドットインストール
    • どんな人におすすめ?
    • 何が勉強できるの?
    • どうやって勉強するの?
    • 料金は?
    • 何が違うの?
  • 第1位 e-navigator
    • どんな人におすすめ?
    • 何が勉強できるの?
    • どうやって勉強するの?
    • 料金は?
    • ポイント
  • まとめ
続きを読む

【実録】instagramで流行中のアフィリコの実態とは!! 説明を受けて思ったこと

こんにちは!

西日本豪雨での被害、皆さま大丈夫でしょうか 私も地元が関西なので、いち早く実家に連絡を入れ、無事を確認できました!  被害に遭われた方々には、早く復旧作業等が済み、以前同様の生活が出来ることを願っています  

さて、マイケル君 instagramで流行中のambassador club(アンバサダークラブ)って知ってる?

それは知らないけど、収益を増やさないか?ってメッセージなら知ってる

皆さんも、instagramを活用して収益を増やしませんか?というような甘い誘惑のメッセージを目にしたことはないでしょうか?

私も現在、instagramのフォロワーといいね数を伸ばすために、instagramを運用し始めました!(その経過報告などは、別記事でご紹介します)

そんな中、instagramメッセージで、アンバサダークラブにご興味はありませんか?というメッセージが届きました 「なんだ?その怪しいモノは」と思ったので、怖いもの見たさも兼ねて、説明を受けた実録です   結論から言うと、アムウェイと似た一種の友達や他人を入会させて儲けるビジネスのことでした。

アンバサダー(Ambassador) の意味は一般的に「大使」と翻訳され、日本では著名人や芸能人などがブランド大使として任命される時に使われることが多いようです。

しかし、今回のアンバサダークラブというのは、本来のアンバサダーの意味とは、全く別物でした。 (っていうかそもそも、誘い文句なだけで、実態もアンバサダークラブとは名乗っていません)  

続きを読む

ワールドカップ2018 TOTO結果発表(1018回、1019回編)

ワールドカップ2018 TOTO結果発表

7月に入り、梅雨が明け暑い日々が続きますね。。。。

しかし、もっと熱い戦いがあるんです

そーです!!ワールドカップ2018 ロシア大会です 連日のニュースでもワールドカップの話題を聞かないことはないですよね! 賛否両論があるポーランド戦を終えて、決勝トーナメント進出した日本VSベルギーの試合も、いよいよ明日になりましたね がんばれニッポン!!

さて、前置きが長くなってしまいましたが、そのワールドカップ2018 ロシア大会の裏でも熱い知恵と知恵の戦い、一獲千金の夢を見た人たちのぶつかり合いがあります! そう、TOTOスポーツくじです その、第1018回と第1019回の購入結果について発表していきたいと思います。

続きを読む

【朗報】誰よりもスマートにPCを扱う操作術

 

【朗報】誰よりもスマートにPCを扱う操作術



効率的な仕事ぶり、充実した私生活 どうもさばみそです

なになに? 他人よりスマートなPC操作ができないですって!?

ダメハック!!

では早速、 誰よりもスマートな操作術教えちゃいましょう!!

用意するもの

  1.  Windows搭載のPC
  2. キーボード

以上です

「マウスもいらないの?」そう思った、あなた!

必要ありません

だからこそ、スマートなんです!!!

続きを読む