JAVA関連のことを調べてみた

JAVA関連のことを調べてみた

Spring Framework 6.1 から追加された RestClient を試してみる

この記事は[NTTコムウェア Advent Calendar 2023](https://qiita.com/advent-calendar/2023/nttcomware) 13日目の記事です。

# はじめに
こんにちは、NTTコムウェアの田村です。
普段は[Macchinetta Framework](https://macchinetta.github.io/)、Springプロジェクトに関する社内からの問合せ対応や技術検証を行っています。
今回は Spring Framework 6.1 から新しく登場したRESTクライアントである RestClient について[公式ドキュメント](https://docs.spring.io/spring-framework/reference/integration/rest-clients.html#rest-restclient)を参照しつつ試してみました。
Spring Boot では 3.2 からRestClientをサポートしています。

:::note info
本記事では Spring Framework 6.1.1 をも

元記事を表示

java 8のLocalDateTimeクラスのisAfterとisBeforeが分かりにくかったため表にしてみた

# LocalDateTimeクラス
LocalDateTimeクラスの日時を比較するのにisAfterとisBeforeを使用するが、毎回どっちがどっちなのかが分からなくなるため表にしてみました。

https://docs.oracle.com/javase/jp/8/docs/api/java/time/LocalDateTime.html

| | **a** | **b** | **a****b**より**前**
**a**.is**After** **b** | **a**

for文に使用する変数iをどこで宣言するか

for文を使うときに, 必ずと言っていいほど現れる変数i(カウンタ変数というらしい).

プログラミングの講義で,for文とはこういうものだと習った際には,for文中で宣言・初期化をいっぺんに行っていた.

“`java: 講義で習ったver
//N: 適当な数
for(int i=0; iが実行されることに変わりはない.
“`java: 講義で習ったver(再掲)
//N: 適当

ABC332A~Fの解答[Java]

## はじめに
今回はコンテスト中にDまで、コンテスト後にFまで解いたのでそれを載せようと思います。

なお、僕のライブラリは[提出結果](https://atcoder.jp/contests/abc332/submissions?f.Task=&f.LanguageName=Java&f.Status=AC&f.User=viral)よりご確認ください。
では、見ていきましょう。

## A – Online Shopping
問題文は[こちら](https://atcoder.jp/contests/abc332/tasks/abc332_a)

総額を求めて$S$円未満かを判定して処理しました。
“`A.java
final class Main{
private static final boolean autoFlush = false;
private static final SimpleScanner sc = new SimpleScanner(System.in);
private static final SimpleWriter out = new S

ABC331A~Fの解答[Java]

## はじめに
今回はコンテストに出ていませんがFまでは解いたのでそれを載せようと思います。

なお、僕のライブラリは[提出結果](https://atcoder.jp/contests/abc331/submissions?f.Task=&f.LanguageName=Java&f.Status=AC&f.User=viral)よりご確認ください。
では、見ていきましょう。

## A – Tomorrow
問題文は[こちら](https://atcoder.jp/contests/abc331/tasks/abc331_a)

$d$に$1$を足して、辻褄を合わせるように調整して出力しました。
“`A.java
final class Main{
private static final boolean autoFlush = false;
private static final SimpleScanner sc = new SimpleScanner(System.in);
private static final SimpleWriter out = new Simp

JDK22では複数ファイルをjavacなしで実行できるようになるらしい

この記事は [ラクス Advent Calendar 2023](https://qiita.com/advent-calendar/2023/rakus) 12日目の記事です。

今年の9月に最新のLTSとなるバージョン21がリリースされたばかりのJavaですが、早くも来年3月にはバージョン22がリリース予定となっています。
いろいろとアップデートが入る予定ですが、今回はその中から、ランチャーの強化に関して取り上げたいと思います。

## 忙しい人向け

**javaコマンドで複数のjavaファイルにまたがる処理を実行できるようになります。**
具体的には以下のようなことができるようになります。

“`java:Main.java
public class Main {
public void main() {
Dog dog = new Dog(“hoge”);
System.out.println(dog.name());
}
}
“`

“`java:Dog.java
public record Dog(String nam

GraphAPIを使ってSharePointのリストに項目を追加する

# はじめに
Microsoft GraphAPIを使ってSharePointのリストに項目を追加する手順です。

# 準備

今回もJavaを使います。Javaの開発環境の他に必要なのは以下です。

– Microsoft Graph Java SDK
– クライアントID/クライアントシークレット生成(EntraID)
– siteidの取得

上記の手順は前回のわたくしの記事に書かれているので参考にしてください。
[Javaを使ってSharePointへファイルをアップロードする](https://qiita.com/fukasuke/items/5784e6c0f658f13f57e5,Javaを使ってSharePointへファイルをアップロードする)
クライアントID/クライアントシークレットを作成するときのアクセス権は「sites.ReadWrite.all」が必要のようです。詳細はMicrosoftのページに記載されています。
[リストに新しいアイテムを作成する](https://learn.microsoft.com/ja-jp/graph/api/listit

【Java】ポケモンで学ぶデザインパターン Iterator編

## はじめに

この記事は[Java Advent Calendar 2023](https://qiita.com/advent-calendar/2023/java)の12日目の記事になります。

本記事は、デザインパターンのIteratorパターンについて取り上げ、Javaで実装してみた事例の紹介になります。対象は、デザインパターンについてあまり知らない方向けで、実際に業務で設計する際に意識してもらえるきっかけになればいいと思います。

## デザインパターンについて

デザインパターンは、GoF(Gang of four)によって提唱された、ソフトウェア設計の問題や課題に対する解決策を提供するための再利用可能な設計のテンプレートです。ソフトウェア開発において、特定の問題に遭遇した際にデザインパターンを適用することで、効率的で柔軟なソリューションを提供することができます。デザインパターンはいくつかの種類があり、その中でも今回はIteratorパターンについて取り上げます。

## Iteratorパターンの概要

Iteratorパターンとは、集約されたオブジェクトを列挙

Apache POIを使用してExcelのセルの色を取得する

“`java
import org.apache.poi.ss.usermodel.*;

import java.io.FileInputStream;
import java.io.IOException;

public class ExcelCellColorReader {
public static void main(String[] args) {
try {
FileInputStream file = new FileInputStream(“path/to/your/excel/file.xlsx”);
Workbook workbook = WorkbookFactory.create(file);

// シートのインデックスを指定
Sheet sheet = workbook.getSheetAt(0);

// セルの座標を指定 (例: B3セル)
int rowNumber = 2;

【VSCode+SpringBoot】SpringBootでAPIを作る①

## はじめに
**SpringBoot**で**API**を作成するための環境構築

## 環境
* Windows10(11でも可)
* Visual Studio Code
* SpringBoot

## 環境構築
1.VSCodeダウンロード

https://code.visualstudio.com/

2.拡張機能インストール
「Ctrl + Shift + X」で拡張機能の検索バーを出す

「Java Extension Pack」と入力し検索
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3627466/d9309c26-0538-1c5f-b899-bca87416af87.png)

Java Extention Packをインストール
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3627466/5363fddb-62da-51b0-552a-492e9419f2

OpenJDK のコンテナイメージについて調べてみた

この記事は [NTTコムウェア AdventCalendar 2023](https://qiita.com/advent-calendar/2023/nttcomware) 11日目の記事です。

# はじめに
NTT コムウェアの坂本翔平です。普段は OpenJDK に関する技術支援や技術調査に従事しています。

コンテナ技術の普及に伴い、コンテナ環境で Java アプリケーションを動作させる機会も増えてきました。
しかし Java アプリケーションをコンテナ環境で動かすために都度 OpenJDK をコンテナ内で手動インストールするのは手間でした。

最近では OpenJDK の多くのディストリビューションベンダが、ビルドした OpenJDK をバンドルしたコンテナイメージを提供するようになりました。
そこで本記事ではそれらの OpenJDK のコンテナイメージについて、どういったものがあるのか簡単に調べた内容を紹介します。

:::note warn
本記事は 2023年11月頃 に確認した情報をベースに記載しています。
今後情報が更新され本記事に記載の内容と異なる点がでてくる可

Android マイグレーション ガイド(古い技術から新しい技術へ)

# はじめに
Androidの技術にはトレンドがあります。開発現場で10年前まではよく使用されていた技術が、今ではほとんど使われなくなっている技術があります。この記事では、Androidで使われている技術(主にライブラリ)に焦点を当てて、技術の移り変わりを整理してみたいと思います(おそらく、かなり主観的な整理になっていると思いますが、それはご容赦ください)。今自分が使っている技術がトレンド的にはどの位置にあるのか、開発現場で使われている技術はどの位置にいるのかを把握することで、どこをどう強化していけばよいのか、その指針が見えてくると思います。読者様の一助になれば幸いです。

# プログラミング言語

歴史:Java -> Kotlin(Dart)

まずは一番有名なのから。Androidのネイティブ開発として採用されているプログラミング言語は、AndroidがStartした当初はJava言語が使用されていました(NDKはC++やC言語で書けますが話が逸れるので省略)。現在はKotlinが主流になっています。Google I/O 2017辺りから急速にKotlinを使う流れになったでしょ

日本語プログラミング言語 プロデル Java C# で関数を介した整数カウントアップ実行時間を仲良く競う(プロデル コンパイル済で再計測)

# はじめに
日本語プログラミング言語 プロデル とJava C# とで関数呼び出しを介した整数カウントアップの反復実行時間を仲良く競い合わせてみます。いわゆるファンクションコールのオーバーヘッドとはどんなものなのかを切り分けます。プロデルはコンパイル済中間コードでの実行を再計測してみます。

## この記事内容の作業環境
Windows11 Pro 22H2
VSCode(Visual Studo Code) 1.78.2
java Eclipse Adoptium jdk-20.0.2.9-hotspot
C# 10 dotnet-sdk-6.0.404-win-x64
Produire Version 2.0.1197 for Windows
CPU Intel(R) Core(TM) i3-5005U 2.00 GHz

## この記事内容の保証
※この記事の実行結果は参考情報です。実行環境に大きく依存します。

# お題のソースコード
#### Java
“`Java:main.java
import java.lang.System;
/**
* プログラム型
*/
c

新設されたList生成メソッドを既存のメソッドの代わりに使う場合の注意点

Java9以降で、List生成メソッドがいくつか新設されましたが、既存のList生成メソッドを単純に置き換えると危険な場合があります。

## Listを生成するメソッド

Listを生成するメソッドで、よく使うものは以下があります。

“`java
// Java1.2から
java.util.ArraysのasList(E…)

// Java8から
java.util.Streamのcollect(java.util.Collectors.toList())

// Java9から
java.util.Listのof(E…)

// Java16から
java.util.StreamのtoList()
“`

このうち、`Stream.of(…).collect(Collectors.toList())`だけは可変リストになっています。

“`java
| JShellへようこそ — バージョン17.0.9
| 概要については、次を入力してください: /help intro

jshell> var arraysAsList = Arrays.asL

SpringフレームワークにおけるBean定義の使い分け

# 1. はじめに
Springフレームワークを用いたアプリケーション開発をする中で、Bean定義の使い分けがわからずに調べた内容を記事としてまとめます。

# 1. 3種類のBean定義
Springにおいて、Bean(ビーン)の定義はアプリケーションのコンポーネントをSpringのDIコンテナに登録する手段です。Beanの定義には3つの方法があります。

## 1.1 アノテーションベースのBean定義
使用場面: 自動検出によってBeanをスキャンしてコンテナに登録する場合。
特徴: @ComponentScanアノテーションを使用し、特定のパッケージ以下のコンポーネントをスキャンしてBeanとして定義される。
“`java
@Configuration
@ComponentScan(basePackages = “com.example”)
public class AppConfig {
// 何も定義しなくても、スキャンされたコンポーネントが自動的にBeanとして登録される。
}
“`

## 1.2 JavaベースのBean定義
– 使用場面: Java構

GCP Vertex AI の生成 AI機能と実装

# GCPのVertex AIの生成AIの概要と機能

## 概要
GCPのVertex AI(バーテックス エーアイ)は、人工知能(AI)のモデルを簡単に作成、トレーニング、デプロイするためのクラウドベースのサービスです。Vertex AIは、Google Cloudの強力なコンピューティングパワーを利用して高品質なAIモデルを構築するためのツールとリソースを提供します。また、Java、Go、C#を含むさまざまなプログラミング言語に対応しており、開発者が利便性を重視しながらAIモデルの開発を行うことができます。

## 機能
1. **データ前処理**: Vertex AIは、トレーニングデータの前処理を簡素化するための機能を提供します。データのスケーリング、欠損値の処理、カテゴリカルデータのエンコーディングなど、さまざまな前処理タスクを自動化することができます。

2. **モデルトレーニング**: Vertex AIは、トレーニングデータを使用してAIモデルをトレーニングするための機能を提供します。トレーニングジョブの作成や管理、ハイパーパラメータのチューニングなど、モデルトレー

Web 開発再入門#1 ― フォルダー構成

Web 開発再入門#1 ― フォルダー構成

# はじめに

Web 開発において、たくさんのファイルを扱っていくことになること、また、今後、他の開発(Python とか)もやることになるので、ある程度、フォルダー構成をきれいに設計することにしました。
きれいな構成にしておくことで、バックアップとかでも便利になるかなと思います。
ただし、フォルダー構成は完璧ではなく、手抜きをしているところが多々あります。技術を速習することが目的でしたので…。

# 基本的な考え

とにかく簡単に。
* インストーラーがあれば、インストーラーを利用する。
* インストーラーによるインストール物は、基本的に C ドライブに置く。
* 開発からリリースに関するものは、全て D ドライブ上に置く。

# フォルダー構成

C:
├ Programs
│ └ pleiades-yyyy-mm
└ Program Files
    ├ MySQL
    │  ├ MySQL Server 8.1

MapBoxMapをAndroid、JAVAのみで使ってマーカーで詰まった話

MapBoxMapは便利な地図APIです。

https://qiita.com/ppt_msdg_maas/items/c35c07ec2502e9a2de12

↑MapBoxMapの概要はこれ見てください
GoogleMap APIより体感お手軽に使えるしなんかマップの見た目とかかなりカスタマイズ効くので個人的には特に理由がなければ埋め込みのMapはこれを使うのが良いと思う。

## 記事の内容
MapBoxMapのドキュメントはほぼKotlinで書かれてる。
Kotlinはとても強い言語なのでやはり特に理由がなければJavaよりこちらを使うべきだが、なんかの理由でJavaでAndroidアプリを作らなければならない場合があった場合、公式ドキュメントに書かれているメソッドとかクラスとかが一部うまく動かないので、主に詰まったところをこの記事に書いていく。

## マーカーを打つ
公式ドキュメント:

https://docs.mapbox.com/android/maps/guides/annotations/annotations/

ここにはmapboxmapでマーカーを打つ方

Spring Bootでエクセルファイルをアップロードして読み込む

**この記事は[フリュー Advent Calendar 2023](https://qiita.com/advent-calendar/2023/furyu)の10日目の記事となります。**
# はじめに
社内で利用するウェブアプリの機能追加として、エクセルファイルを読み込ませて一括処理を行いたいという要望があったので、実装しました。
オンメモリからエクセルファイルを読み込む方法がレアケースなのか、意外にも他に記事として見かけませんでしたので、私が得た情報をアップロードからの流れに沿ってまとめておこうと思います。

# ファイルをアップロードする
フロントエンド、バックエンドそれぞれ説明します。
記載しているソースコードに最低限としており、エラー処理などは入っていませんので実際に利用する際には必要に応じてチェックなど行ってください。

## 環境
以下の環境で動作を確認しています。

| ライブラリ | バージョン |
| —- | —- |
| Spring Boot | 3.2.0 |
| Open JDK | 21 |
| JQuery | 3.7.1 |
| Apa

【初心者向け】SPRINGでCSVデータをDBに登録してみた

# はじめに
押忍!
今日は業務用アプリとかでよく見る
CSVデータをアップロードしてDBに登録する機能をSpringを使って作成してみました!

# そもそもCSVってなんぞ
私は業界に入るまで見たことも触ったこともなかったんで一応記載しておきます。
Comma Separated Valuesの略称で
“`:CSVsample
従業員番号,氏名,部署
A123456789,総務太郎,総務部
B223456789,営業花子,営業部
“`
こんな感じでカンマごとに値を区切ったデータの事です。
ファイル形式は .csv になります。

ちなみに1行目は項目名を記載したヘッダーレコードなのですが、
物によってあったりなかったりします。

今回はある想定で作成をしたので
DBに登録するのは2行目以降ってことですね。

# やりたいこと
画面からCSVを選択してアップロード
アップロードされたCSVの内容をDBに登録

# 作ってみた
まずは画面から
csvに下記のフォームを追加します。

“`HTML