JAVA関連のことを調べてみた2020年11月28日

JAVA関連のことを調べてみた2020年11月28日

【Java】コレクションフレームワーク( set )

# 【Set】 重複要素のないコレクション

## Setとは

Setは、Listのと同様に 「**データをまとめたもの**」になります。
ですが、双方にはこのような違いがあります。

– Mapのようなキーと値の関連付けをしない
– インデックスが存在しない
– 同じ値のものは2つ以上持てない

SQL にある [「DISTINCT」や、「ORDER BY」 ](https://qiita.com/takahirocook/items/89aba8585dcd42dd310f)のようなイメージだと思います。

### Setの使い所
以上に書いた「 **同じ値のものは2つ以上持てない** 」などの特性をいかし、このような使い所が考えられます。

– 商品を安い順に並べる
– 会社の部署はいくつあるのか調べる
– ポケモンのタイプは何種類あるか調べる
– この学校の生徒はどこの出身者がいるかみる。

といったとき Set が役立つのではないかと思います。

## Setの種類
Setインタフェースを実装するものには、`HashSetクラス`, `TreeSetクラス`, `Link

元記事を表示

【Java】 java.util コレクションフレームワーク (List, Set, Map )

# コレクションフレームワーク
この記事では、java.utilをして利用できる便利なクラスを学んで行きます。

## コレクションフレームワークとは
そもそも、フレームワークとは概念的な意味で、
– 「**何かの枠組み**」
– 「**システム開発を楽に行えるように用意された、プログラムとかのひな形**」

のことです。つまり、
`コレクションフレームワーク = 便利な機能をまとめたもの`みたいな考え方でいいと思います。

これらの **用意された便利な機能を、柔軟に扱うことを考えられているのがコレクション・フレームワーク**です。

## Javaのコレクションフレームワーク

(他にも両端からしか値を出し入れできないDequeというのもあるんですが、用途が限られるので今回は割愛)。

## java.utilパッケージとは
java.utilは Javaのフレームワークの一種で、Javaで使われる 、以下のような データを表現するのに必要なデータ構造が一通り揃っています。

– [配列操作]
– イベント
– モデル
– 日付および時間…

その中でも代表的な「[配列操作]」

元記事を表示

【Java】拡張 for文

# 拡張for文
## 拡張for文とは
[配列]やコレクションといった複数の要素を持っているものからすべての要素に含まれる値を順番に取り出して処理するために使われます。

拡張for文は、「要素の指定ができない」という通常の[for文]との違いがあります。

## 拡張for文の記述の仕方
拡張for文の基本的な書き方はこちらです。

“`java
for (型 変数名: 配列名もしくはコレクション名){
実行する処理
}
“`

値を順番に取り出したい配列やコレクションと、取り出した値を格納する変数を:(コロン)で区切って記述します。

繰り返される回数は配列やコレクションに含まれている値の数なので条件式と変化式は必要ありません。

## [for文]との使い分け
結論、拡張for文をつかったほうが「 **記述内容がシンプルでコーディングもしやすく、可読性も優れている**」ので記述ミスが軽減される点で現場では重宝されます。

こちらが通常の[for文]です。

“`
for(初期化式; 条件式; 変化式){
 実行する処理
}
“`
### for文

元記事を表示

Javaでの文字列結合について

# Javaでの文字列結合
業務でJavaを触っている中で何気なく、文字列結合って使ってるが、先日コードレビューを受けた時に、文字列結合をする時は `+`ではなく、`StringBuilder`を使ったほうが処理速度が早いとの指摘を受けた。
正直経験も浅く、言語の仕様までを把握していないのでいい機会だと思い調べてみました。

## 「+」 を使用した文字列結合
`StrgingBuilder` のインスタンスを生成し `append()`で文字列を結合した後に、`String`のインスタンスを作成するらしい。メモリ上の領域が広がるわけではないらしいです。

つまりループ処理の中などで`+演算子`を使って文字列を結合すると、メモリを無駄に消費してしまう。

そのため`StringBuilder`を使用するほうが性能的には良いらしい。

ただし以下のようなケースの場合は、`+演算子`を使うほうがよい。
・1行で複数の文字列リテラルを結合する場合
・1行で複数の文字列リテラルとString変数を結合する場合

“`java
public class Main {

public s

元記事を表示

リクエストパラメータに情報を含めず ヘッダーに設定する方法

#結論:実装は以下
“`java
@GetMapping(path = “/hoge”, produces = “application/json”)
public Response getSproItems(@Validated Request request,
@RequestHeader (value=”User-Agent”, required=false) String agent,
@RequestHeader(“Cookie”) String cookie)
return service.getResponse(request,agent,cookie)
}
“`

#リクエストURL
https://hoge.jp/hoge?query=apple&results=30&in_stock=true
クエリ:apple
件数:30
在庫有無:有

ARCで送るとこんな感じ。
![719dd75

元記事を表示

【Java】 java.util コレクションフレームワーク ( Map )


# 【Map】キーと値とのマッピングを保持する

連想配列を取り扱うものに Map というコレクションがあります。

## Mapとは

Mapは *「キー」と「値」* の二つの要素から成り立っています。

「 *キー* は値につける名前のようなもの 」で、値ひとつひとつに「 *キー* 」が存在しており、「 *キー* 」と「 *値* 」がペアになっているのが Map の特徴です。

*キー* は一意(同じものが複数存在しない)ですが、値は同じものが複数あってもいいです。

## Map系クラスの特徴

マップはMap[インターフェース]を元に実装されていて、 *HashMap、TreMap、LinkedHashMap* の3つがよく使われます。

| Mapクラス | 概要

元記事を表示

【Java・SpringBoot】Spring JDBC でユーザー登録(SpringBootアプリケーション実践編10)

ホーム画面からユーザー一覧画面に遷移し、ユーザーの詳細を表示するアプリケーションを作成して
Spring JDBCの使い方について学びます⭐️
今回は前回作った画面に引き続き、**JDBC Templateを実装**して、**データを登録(insert)**する方法について学んでいきます^^
構成は前回の記事を参考にしてください

⭐️前回の記事
[【Java・SpringBoot】Spring JDBC(SpringBootアプリケーション実践編9)](【Java・SpringBoot】Spring JDBC(SpringBootアプリケーション実践編9))

#データの登録(insert)
###updateメソッド
* リポジトリー用クラスのinsert用メソッドを作成
* JdbcTemplateクラスを使って登録・更新・削除する

“`java
//例
int rowNumber = jdbc.update(“INSERT INTO m_user(user_id,” + ” password,” + ” user_name,” + ” role)” + ” VALUES(?

元記事を表示

Mockitoの使い方

## Mockitoとは
Mockitoは、Javaのユニットテストのために開発されたモックフレームワーク(mocking framework)です。テストでモックオブジェクトを直感的に操作できるのを目的として開発されています。

キレイでシンプルなAPIでモックを扱うテストコードを記述できること、また記述されたテストコードの可読性が高くわかりやすい検証エラーを生成することがMockitoの特徴です。

## なぜモック化が必要なのか。
ユニットテストにおいてサービス単位に切り離してテストを行いたいにもかかわらず、処理内にサービスの呼び出しがあり、
サービス区切りにテストをすることが行えない場合があります。
そこで必要となるのがモック化です。
ユニットテスト時に依存関係ができているものをモック化することにより、正常にユニットテストを行うことができます。

モック化が想定されるのは以下のようなケースです。
・依存する部品で任意の内容をテスト対象に返すのが困難な場合
 ※たとえばHDDの容量不足というエラーを出力する必要がある試験の場合
・依存する部品を利用すると別の試験で副作用が発生する

元記事を表示

Thymeleafの?(クエスチョンマーク)ってなんぞや

Thymeleafを業務で使っていて、\${user?.name}とか${object?.id}みたいな記法を見かけて
使い方が分からなかったのでメモ

※誤りがありましたらご指摘ください。
##結論

Safe Navigation operatorと呼ばれるいわゆるNullチェックをしてくれる
Spring Expression Language (SpEL)の記法の一種です。

ちゃんとSpringのドキュメントにものっていますね。

https://docs.spring.io/spring-framework/docs/4.2.x/spring-framework-reference/html/expressions.html#expressions-operator-safe-navigation

訳してみると、以下のとおりです。

>
セーフナビゲーション演算子は、NullPointerExceptionを回避するために使用され、Groovy言語に由来する。通常、オブジェクトへの参照がある場合は、オブジェクトのメソッドまたはプロパティにアクセスする前に、それがnull

元記事を表示

Java 繰り返しの処理

#はじめに
学習用のメモになります。

#while文
“`
// whileによるループ処理

public class Main {
public static void main(String[] args) {
// カウンタ変数の初期化
while (条件式) {
// 繰り返し処理
// カウンタ変数の更新
}
}
}
“`
* 括弧の中に入るのは条件式のみ

####iが5以下の場合の繰り返す処理

“`
// whileによるループ処理

public class Main {
public static void main(String[] args) {
int i = 0; // カウンタ変数の初期化
while (i <= 5) { // 0 -> 1 -> 2 -> 3 ・・・ 5 -> 6
System.out.println(“hello world ” + i);

元記事を表示

Java 標準入力

#はじめに
学習用のメモになります。

#標準入力とは?
もともとはLINUXなどのUnix系OSで用意されていた仕組みです。
標準入力に対応するようにプログラムを作っておけば、プログラム実行時に、ファイルを読み込んだり、キーボードからデータを読み込んだり、パラメータを指定したりというように、入力先を切り替えることができます。

#標準入力から文字列の読み込み
“`
// 標準入力
import java.util.*;

public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String line = sc.next();
System.out.println(line);
}
}

“`

“`
Scanner sc = new Scanner(System.in);
“`
標準入力を読み込むために必要

“`
String line = sc.next();
“`

元記事を表示

TomcatのJavaアプリ(VM環境)をTransformation Advisorを使ってモダナイズする

#1. はじめに

今回は Tomcat環境でTransformation Advisorを実行する内容が日本語・英語ともにネットを検索しても見つからなかったので、実際に試して、Qiitaに投稿することにしました。

この投稿をきっかけに、Tomcatを分析・移行対象としたTransformation Advisorの流れの雰囲気がつかんでもらえればと思います。

# 2. Transformation Advisorとは
Transformation Advisorはオンプレミス環境で動作しているJavaのミドルウェア・アプリケーションを分析し、生成されたマイグレーションバンドルを使って、 OpenShiftの Libertyコンテナ上にJavaアプリをデプロイすることができるJavaアプリケーションのモダナイズするための移行支援ツールです。

分析結果では、コンテナ化(Liberty)するために必要な項目が、「移行の複雑さ、コスト、および推奨事項など」という観点で出力されます。
また、コンテナ化に必要なDockerfile、OpenShiftにデプロイするために必要なYaml、 L

元記事を表示

【Java】コレクションフレームワーク ( List )

# コレクションフレームワーク
この記事では、java.utilをして利用できる便利なクラスを学んで行きます。

## コレクションフレームワークとは
そもそも、フレームワークとは概念的な意味で、
– 「**何かの枠組み**」
– 「**システム開発を楽に行えるように用意された、プログラムとかのひな形**」

のことです。つまり、
`コレクションフレームワーク = 便利な機能をまとめたもの`みたいな考え方でいいと思います。

これらの **用意された便利な機能を、柔軟に扱うことを考えられているのがコレクション・フレームワーク**です。

## java.utilパッケージとは
java.utilは Javaのフレームワークの一種で、Javaで使われる 、以下のような データを表現するのに必要なデータ構造が一通り揃っています。

– [配列操作]
– イベント
– モデル
– 日付および時間…

その中でも代表的な「[配列操作]」をするために3つの便利なクラスがあります。それが、**「List」, 「Set」, 「Map」**です。

1. *リスト(List) 値が順番に並んで格納

元記事を表示

【Java・SpringBoot】Spring JDBC(SpringBootアプリケーション実践編9)

ホーム画面からユーザー一覧画面に遷移し、ユーザーの詳細を表示するアプリケーションを作成して
Spring JDBCの使い方について学びます⭐️
今回はまず**JDBC Templateを実装するための画面作成**を行います

構成はこれまでの記事を参考にしてください
[【Java・SpringBoot・Thymeleaf】ブラウザ言語設定でエラーメッセージの言語を変更(SpringBootアプリケーション実践編8)](https://qiita.com/suema0331/items/e3faf24876f788a5a6c5)
[【Java・SpringBoot】Spring AOP実践](https://qiita.com/suema0331/items/c7f2287fd5bf84d83691)

#Spring JDBCとは
* **JDBC**は**JavaでDBにアクセスするためのライブラリ**
* SpringJDBCは、**JDBCを使ってデータベースにアクセス**
* 通常のJDBCでは、DBへの接続やクローズ処理などを毎回書かないといけない。。。
* →?Spring

元記事を表示

【Java・SpringBoot】Spring AOP実践

#AOP(AspectOrientedProgramming)とは?
* AOPとは、**アスペクト指向プログラミング**
* **各クラスで共通する処理を抜き出して、まとめて管理する**こと
* 例えば、各クラスのメソッドでいちいち開始ログと終了ログを書くのは面倒。。。。
* 書き忘れる、コードの修正量がとても多くなることも。。。
* AOPを使えば、**共通の処理をまとめて一ヶ所に書いておき、共通処理をどのクラスの、どのメソッドに適用するかを選択**することができる!!嬉しい!
* 共通処理の例:ログ出力、セキュリティ、トランザクション、例外処理、キャッシュリトライなどなど。
* そうすることで、**各クラスでは本来書くべきコードに集中**でき、コードの可読性もUP?

#AOPの用語
* **Advice**:AOPで実行する処理
* **Pointcut**:処理を実行する場所(クラスやメソッド)
* **JoinPoint**:処理を実行するタイミング

|JoinPoint|Advice実行タイミング|
|:-:|:-:|
|Before|メソッド

元記事を表示

【Java・SpringBoot・Thymeleaf】ブラウザ言語設定でエラーメッセージの言語を変更(SpringBootアプリケーション実践編8)

#おさらい
ログインをして、ユーザー一覧を表示するアプリケーションを作成し、
Springでの開発について勉強していきます?
前回はユーザー登録画面で、まずは必須入力チェックを行い、次に中身のチェックを行うという、エラー**メッセージを順番に実行**する実装をしました〜
今回は**Webブラウザの言語設定に応じて、メッセージプロパティファイルを切り替え、表示メッセージを英語に切り替え**られるようにします

前回の記事?
[【Java・SpringBoot・Thymeleaf】バリデーションチェックの順番を設定(SpringBootアプリケーション実践編7)](https://qiita.com/suema0331/items/9369646e937ed6e5b257)

構成は以下のようになっています

“`
Project Root
└─src
└─ main
└─ java
└─ com.example.demo
└─ login
└─ controlle

元記事を表示

SpringBoot+MyBatis+DBUnitでCRUDのテストを書いてみた(後編)

# はじめに
[前回の記事](https://qiita.com/kilvis/items/123a01d5d4fae641ad5b)ではDB操作を行うService層以降のクラスの実装を行いました。
今回はいよいよServiceを使ったDBのCRUD操作を検証するJUnitテストケースを実装していきます。

# 開発環境
OS : macOS Catalina
IDE : IntelliJ Ultimate
Java : 11
Gradle : 6.6.1
SpringBoot : 2.3.4

# 1. 単体テスト用のデータベースの準備
前回の記事でローカル開発用にDockerの`MySQL`をセットアップしました。
今回は単体テスト用に`H2`データベースを使います。

Java製でアプリに組み込んで使えて、外部接続の必要がないため単体テストを行うには最適のDBです。
MySQL固有の機能や関数は`H2`では使えませんが、CRUDが主なWebアプリ開発ではほとんど困ることはないと思います。

実際、アジャイルの開発現場では自動テストや継続的インテグレーションと非常に相性のいい

元記事を表示

【Eclipse】Javaのパッケージの作成方法

# Eclipse上でパッケージを作成する方法

## パッケージの基本的な作り方

1. パッケージエクスプローラ上の作成したプロジェクトの直下にある src を右クリック
2. 新規 → [パッケージ]を選択
3. [パッケージ]名を入力する
4. 作成できていれば、”田”のようなアイコンが出来ている。

## [パッケージ] の直下に [パッケージ]をつくる

1. 先程と同様にパッケージ作成にすすむ
2. パッケージ名を入力する際に`先程の親パッケージ名.子パッケージ名`にして命名する

例えば、 最初に作った [パッケージ]名が、「package」だったとしたら、
“`
package.child_1
“`
みたいな感じで、ドットで繋いであげましょう。

[パッケージ]はカテゴリーみたいな考え方でいいと思います。
[パッケージ]の階層も、「 大分類 > 中分類 > 小分類 」のようなイメージですね。

料理で例えるなら、
「 料理 > イタリアン > 前菜 」みたいな感じでしょうか?
プロジェクトのファイルは、基本的にはパッケージ直下に作成してグルーピングすることにより、

元記事を表示

Maven の mvn exec:java で実行した java のプログラムを datadog agent によりお手軽に Profile する方法

MAVEN_OPTS に、

https://docs.datadoghq.com/ja/tracing/setup/java/?tab=springboot

の、

![Screen Shot 2020-11-27 at 0.20.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/18869/e0adf9f9-ff60-46f4-be33-f34b3ea29103.png)

で作った -javaagent の snipet を指定する。

“`shell
export MAVEN_OPTS=”-javaagent:/path/to/dd-java-agent.jar -Ddd.profiling.enabled=true -Ddd.logs.injection=true -Ddd.trace.sample.rate=1 -Ddd.service=YOURAPPNAME -Ddd.env=dev”

mvn install; mvn compile; mvn exec:java -Dexec.m

元記事を表示

【Java】インポート( 他のパッケージのクラスやメソッドを使う )

## インポート
他の[パッケージ]や[クラス]を呼び出して使う、インポートに関するメモです。

## インポートとは

インポートとは、「 **他の[パッケージ]に記入されているクラスや関数を実行するための記述** 」です。

「 **他の [クラス] を利用して [クラス] の [インスタンス] を生成することができ、また「**外部ライブラリを自分のプログラムで使えるようにする時** 」も、インポートを用います。

## インポートの使い方
インポートは基本的にソースコードの先頭にある、[パッケージ]の下に記述する。

import の後ろに、 [パッケージ]と[クラス]もしくは[インターフェイス]名を指定して読み込むみます。

“`
import パッケージ名.クラス名;
import パッケージ名.インターフェイス名;
“`

サンプルコード

“`
// javaパッケージの中のlangパッケージの中のMathクラスをimport
import java.lang.Math;

public class StaticClass {
public sta

元記事を表示

OTHERカテゴリの最新記事