JAVA関連のことを調べてみた2023年08月05日

JAVA関連のことを調べてみた2023年08月05日

[リサーチ・メモ]ClientBuilderでSendGrid実装

## 背景
仕事で使用する予定だったSendGridを、事前の自己学習では、pomに依存関係を追加する方法で利用していた。
しかし、実際はClientBuilderで実装することとなり、触ったことが無かった為、備忘録として纏める。

## 自己学習での方法
1\. 下記をpomに記載し依存関係を追加
“`

com.sendgrid
sendgrid-java
4.7.0

“`

2\. ライブラリをインポートする
“`
import com.sendgrid.Method;
import com.sendgrid.Request;
import com.sendgrid.Response;
import com.sendgrid.SendGrid;
“`

3\. メール本文を作成し送信する
今回は事前に作成したテンプレートに文字を埋め込み送信する
※[ドキ

元記事を表示

モジュールシステムを使ってみた~OpenJDK17へのアップデートに備えて~

# 目次
– **1. はじめに**
– [1-1. 執筆時点の人物像](#1-1-執筆時点の人物像)
– [1-2. 執筆のモチベーション](#1-2-執筆のモチベーション)
– [1-3. モジュールシステムとは?](#1-3-モジュールシステムとは)
– [1-4. JEP403という壁](#1-4-jep403という壁)

– **2. 検証(検証用のプロジェクトをGitHubで公開しています)**
– [2-1. 検証環境](#2-1-検証環境)
– [2-2. 検証資材の概要](#2-2-検証資材の概要)
– [2-3. カプセル化の検証](#2-3-カプセル化の検証)
– [2-4. 無名モジュール](#2-4-無名モジュール)

## 1-1. 執筆時点の人物像
・入社5年目
・Webシステム Java(Spring系)
・AP基盤レイヤ担当
・その他、誰もやりたがらないこと(性能試験、CI/CD構築、試験環境構築…)を担当

## 1-2. 執筆のモチベーション
担当しているシステムが、

元記事を表示

【Java】 イテレータ

# イテレータ(iterator)とは
* リストに含まれる1つの箱を「今ここ」と指す矢印のようなもの
矢印は「次へ」と指示されると次の箱を指すように移動する
## Iterator<>が備えるメソッド
* `hasNext()`・・・次の要素を指せるかを判定。戻り値/boolean
* `next()`・・・次の要素を指し、その内容を返す。戻り値/反復処理での次の要素
## イテレータの取得
“`java:イテレータの取得
Iterator<リスト要素の型> it = リスト変数.iterator();
“`
* イテレータ(矢印)はリストの`先頭(最初の箱)よりもっと前`を指した状態が取得される(0番目の前)
## イテレータを用いた要素の取り出し
“`java:イテレーターを使用したArrayListの繰り返し処理
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

public class IteratorClass {
public static

元記事を表示

JavaでPDF文書のレイヤーを追加または削除する方法

PDFレイヤー(可視レイヤーまたは追加レイヤーとも呼ばれる)は、PDF文書内のコンテンツの可視性を整理および制御するための方法です。 インタラクティブな文書の作成、機密情報の非表示、多言語版の作成などに使用できます。 レイヤーを追加したり削除したりすることで、ユーザーは必要に応じてPDF文書の表示や内容をカスタマイズできます。 この記事では、無料の[Free Spire.PDF for Java](https://jp.e-iceblue.com/introduce/free-spire-pdf-for-java.html)を使用して**PDF文書にレイヤーを追加**したり、**PDF文書からレイヤーを削除**する方法について説明します。
– **[PDFレイヤーの追加](#pdfレイヤーの追加)**
– **[PDFレイヤーの削除](#pdfレイヤーの削除)**

### 依存関係の追加
Free Spire.PDF for Javaは、[公式サイト](https://jp.e-iceblue.com/download/free-spire-pdf-for-java.html)から手

元記事を表示

Javaで「相対パスを絶対パスに変換する(Path.toAbsolutePath)」の動作を確認してみた

# 概要
Javaで「相対パスを絶対パスに変換する(Path.toAbsolutePath)」の動作を確認してみました。以下のページを参考にしました。

https://www.javadrive.jp/start/file/index13.html

# 実装
以下のファイルを作成しました。
“`JSample13_1.java
import java.nio.file.Path;
import java.nio.file.Paths;

class JSample13_1{
public static void main(String[] args){
Path p1 = Paths.get(“/code/java/file/report.txt”);
Path p2 = Paths.get(“report.txt”);
Path p3 = p2.toAbsolutePath();

System.out.println(p1);
System.out.println(p2);
System.out.println(p3);

元記事を表示

assertThatとは

## assertThat

:::note
**JUnitやHamcrestを使用して、テストコード内で条件を検証するためのメソッド**
:::

テスト対象の実行結果やオブジェクトの状態を、期待する値や条件と比較する
比較結果が一致しない場合は、テストがFailする

## assertThatの例

### このメソッドをテストする

“`java
public class Calculator {
public int add(int a, int b) {
return a + b;
}
}
“`
### assertThatを使ってテストする

“`java
import org.junit.Test;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.*;

public class CalculatorTest {

@Test
public void testAdd() {

元記事を表示

Azure Container Apps (ACA) に Java JAX-RS カスタムコンテナイメージをデプロイする

# Azure Container Apps (ACA) に Java JAX-RS カスタムコンテナイメージをデプロイする

こんにちは、株式会社船井総研デジタルの @fsdg-adachi_h です。今回は、Azure Container Apps 環境で、Java JAX-RS Web アプリケーションをコンテナとして起動する方法を紹介します。
![java_on_azure-container-apps.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3206449/2debf0a5-df60-adb4-3efa-fe8eb0c69ad9.png)

## 目的

Windows 11 の Linux でクラウド開発します。

こちらから記事の一覧がご覧いただけます。

https://qiita.com/fsdg-adachi_h/items/6119ab05d8b13527efd8

## 実現すること

Microsoft Azure Container Apps (ACA) に Java

元記事を表示

Leetcode 17. Letter Combinations of a Phone Number

https://leetcode.com/problems/letter-combinations-of-a-phone-number/description/

## アプローチ
– backtracking

“`java
class Solution {

public List letterCombinations(String digits) {
ArrayList result = new ArrayList<>();
if (digits.length() == 0) {
return result;
}

HashMap map = new HashMap<>();
map.put(‘2’, “abc”);
map.put(‘3’, “def”);
map.put(‘4’, “ghi”);
map.put(‘5’, “jkl”);

元記事を表示

【Java】HashMapの使い方

# はじめに

### Mapとは
* 「キー」と「値」をペアにして複数のデータを格納できる
* 要素を繰り返し処理で「ループ」する事が可能
※ 「キー」任意の文字列を使用できます。「値」StringやIntegerなどの参照型です。

# HashMap
* Mapの実装クラス
* キーと値のペアをマップに追加します
※ Hash(寄せ集め)、Map(位置付け)

### HashMapのインスタンス化
“`java:インスタンス化
Map<キーの型, 値の型> マップ変数 = new HashMap<キーの型, 値の型>();
“`

# サンプルコード
“`java:HashMapクラスの利用
public class ClassA {
public static void main(String[] args) {
// ペアで値を格納
Map prefs = new HashMap<>();
prefs.put(“北海道”, 1000);
prefs.put(

元記事を表示

Spring bootで良く見るDI方法の違い(コンストラクタ vs @Autowired)

日頃の業務でなんだかんだJavaを書きますが、良くわかっていない部分があったのでその解消。

Springフレームワークを使っていますが、他のクラスを利用する際にDIしますよね。
書き方としては、@Autowiredを利用する場合とコンストラクタを利用する場合があると思います。

皆さんはどちらですか。
私が担当しているアプリでは後者のコンストラクタを利用する方が主流です。
せっかくなのでこの違いを整理してみました。

# コンストラクタを利用する書き方
HogeValidatorクラスをDIする際こんな感じで書きますね。
“`Main.Java
@Service
public class HogeServiceImpl implements HogeService {

// ① インターフェースのfinal宣言
private final HogeValidator hogeValidator;

// ② コンストラクタでのDI
@Autowired
public HogeService(HogeValidator hogeVal

元記事を表示

Javaで「Pathオブジェクトを使ってファイルやディレクトリを表す」の動作を確認してみた

# 概要
Javaで「Pathオブジェクトを使ってファイルやディレクトリを表す」の動作を確認してみました。以下のページを参考にしました。

https://www.javadrive.jp/start/file/index1.html

# 実装
以下のファイルを作成してみました。
“` JSample1_1.java
import java.nio.file.Path;
import java.nio.file.Paths;

class JSample1_1{
public static void main(String[] args){
Path p1 = Paths.get(“C:\\code\\java\\file\\report.txt”);
Path p2 = Paths.get(“C:”, “code”, “java”, “file”, “report.txt”);
Path p3 = Paths.get(“C:/code/java/file/report.txt”);
Path p4 = Paths.get(“C:/code/ja

元記事を表示

スッキリわかるJava入門 第3版を読んでみて-part4-

# はじめに
こんにちは(・ω・)ノ
今回は配列について学びました!

## 第4章 配列
### 1.配列のメリット
データ構造…一定のルールに従ってデータを格納する形式
代表的なもの __配列__

配列とは…
 同一種類の複数データを並び順で格納するデータ構造
<イメージ>
箱が連続して並んでいる
[0][1][2][3][4][5][6][7]

箱の一つひとつを __要素__
配列の各要素には同一種類のデータしか格納できない
 ⇨「1つ目には数値、2つ目には文字列」のようなことはダメ?

各要素にある番号を __添え字__
添え字は0から始まる決まりになっている

### 2.配列の書き方
配列の作成には以下の2ステップが必要
Step1.配列変数の宣言
 `要素の型[] 配列変数名`
Step2.要素の作成と代入
 `配列変数名 = new 要素の型[要素数]`
上記のStep1,2を同時に行うことも可能
例:`int []scores = new int[5];`

配列の要素数の取得
 `配列変数名.length`
配列の利用方法
`scores[1]=10;`

元記事を表示

Docker 環境で Java JAX-RS Webサービスを起動する

# Docker 環境で Java JAX-RS Webサービスを起動する

こんにちは、株式会社船井総研デジタルの @fsdg-adachi_h です。今回は、WSL Ubuntu 22.04 の Docker 環境で Java JAX-RS Web アプリケーションをコンテナとして起動する方法を紹介します。
![java_on_docker.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3206449/bae348c7-5527-6f0f-5eb6-38c684377bc5.png)

## 目的

Windows 11 の Linux でクラウド開発します。

こちらから記事の一覧がご覧いただけます。

https://qiita.com/fsdg-adachi_h/items/6119ab05d8b13527efd8

## 実現すること

ローカル環境の Ubuntu の Docker 環境で、Dockerfile からビルドした Java JAX-RS Web サービスのカスタムコンテナを起

元記事を表示

Hamcrestとは

### Hamcrestとは

:::note
JUnitと一緒に使われることが多い**ライブラリ**である
**テスト結果の検証(アサーション)を行うときに便利**
:::

### Hamcrestの特徴

– 独自のマッチャーを使用してテスト結果を意味のある文章で表現できる
よって**テストコードの可読性が上がりテストの意図が明確となる**

### Hamcrestのマッチャーの例

– **文字列**
“`java
String actualString = “Hello, World!”;
assertThat(actualString, containsString(“Hello”)); // actualStringに”Hello”を含むか検証
assertThat(actualString, startsWith(“Hello”)); // actualStringが”Hello”で始まるか検証
assertThat(actualString, endsWith(“World!”)); // actualStringが”World!”で終わるか検証

“`
– *

元記事を表示

JAVA練習_01

初めまして

現在都内でITエンジニアとして働いている者です。

ITエンジニアとしてキャリアをスタートして現在9か月程です。
この記事ではこれからJAVAを触り始めましたので自身の勉強したことや感想を書いていきます。
まだ始めたばかりでこんなこともわからないのかと思うかもしれませんが見ていただきましたら勉強方法など教えていただけると嬉しいです。

目次

・JDKのインストール
・OpenJDKのインストール
・PATHの設定及び環境変数JAVA_HOMEの設定

JDKのインストール

まず最初にJAVAアプリケーションを開発するうえで必要となるJava SE Development Kit (JDK)のダウンロード、インストールから始めました。
今回は参考にしたサイトに記載されていたoracle社が提供しているOpenJDKをダウンロード、インストールしました。

参考:
以下のサイトで勉強しました。
タイトル「JAVA入門」
https://www.javadrive.jp/start/

以下のURLからダウンロードしました。
・http://jdk.java.net

元記事を表示

【JAVA・学習ログ②】「式」「型変換」「命令実行文」について

第2回教本に沿ってやってみたシリーズ

≪使用教材≫スッキリわかるJava入門 第3版 スッキリわかるシリーズ
## ■「式」
計算処理をコンピューターに行わせる文を「式」という。
式は”オペランド”と”演算子”のみで構成される。
![スクリーンショット 2023-08-02 002333.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3520365/3f018352-7655-6817-6e50-0e1e97ea300f.png)

*リテラル
 ”オペランド”の中でソースコードに記述される具体的な値。画中だと「12」「6」。
 リテラルはそれぞれ適したデータ型を持っており、「12」や「6」などの小数点のない整数は『int型』に属す。

*エスケープシーケンス
 「”」「’」などの引用符記号、¥、改行を記述する際に用いられる特殊な文字。
 上記記号を画面に表示したい場合に用いる。

  ▽ 表示したい文字列
![スクリーンショット2023-08-02 020143.png](https://

元記事を表示

java アウトプット メソッド

# mainメソッド
mainメソッドには以下の2つのルールがあります。

① ファイルを実行するとmainメソッドが実行される
② mainメソッドの引数などは、必ず決められた通りに記述する必要がある

__① ファイルを実行するとmainメソッドが実行される__
今までreplitにコードを書く際に、以下のような記述を行ってきました。
“`java
class Main {
public static void main(String[] args) {
// ここに処理を書く
{
}
“`
この2行目を見ると「main」という文字が見えますが、これはメソッド名を表しています。

つまり、今まで書いてきたコードは、mainメソッドの中身を定義してきたことになります。
Javaのmainメソッドには、ファイルの実行時に自動的に実行されるというルールがあります。そのため、mainメソッドを実行するコードを書かなくても実行されるのです。

__② mainメソッドの引数などは、必ず決められた通りに記述する__
通常のメソッドは引数の設定などを変更できますが、m

元記事を表示

Leetcode 46. Permutations

https://leetcode.com/problems/permutations/description/

## アプローチ
– Backtracking

“`java
class Solution {
public List> permute(int[] nums) {
List> result = new ArrayList<>();
helper(new ArrayList<>(), new boolean[nums.length], nums, result);
return result;
}

public void helper(ArrayList arrayList, boolean[] isVisited, int[] nums, List> result) {
if (arrayList.size() == nums.length) {
resu

元記事を表示

enumが列挙型だから、enumのコンストラクタは暗黙的にプライベートになり、外部からのインスタンス化ができない件について

# :mag_right:enumが列挙型だからと言われてもピンとこない

:::note
**enumは列挙定数を表現するために使用されることが多く、その定数はプログラム内で固定された値として利用される
新しいインスタンスを生成することができると、enumの特性を損なう可能性がある**
そのため、enumのコンストラクタを暗黙的にプライベートにして、外部からのインスタンス化を禁止している
:::

例えばこんなenumがあったとする
“`java
enum DayOfWeek {
MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY, SUNDAY;
}
“`

> enumは列挙定数を表現するために使用されることが多く、その定数はプログラム内で> 固定された値として利用される

例のenumは曜日を表現するものであり、定数は固定された値である

> 新しいインスタンスを生成することができると、enumの特性を損なう可能性がある

もし新しいインスタンス(曜日)を生成できてしまうと困るよねということ

>

元記事を表示

[速習] ドメイン駆動設計 最新 GPT-4 32kを使用した設計手法について

![c05.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3521573/6cc17903-9d1a-aeab-2629-baff058f039c.png)

## GPT-4 32k

大規模なコンテキストサイズにより複雑なタスクを破綻せずに実行することが可能となりました。これを利用し、ドメイン駆動設計(DDD)のプロセスをGPT-4 32kを使用して実現したいと思います。これは、あくまで思いつきによる実験ですが、32kの可能性を探求する一環として、その結果は大いに意義があると考えています。

## ステップの解説

GPT-4 32kを使用したドメイン駆動設

元記事を表示

OTHERカテゴリの最新記事