- 1. 2つのオブジェクトのフィールド値を全て比較する
- 2. Javaで「配列の指定範囲の要素から新しい配列を作成する(copyOfRange)」の動作を確認してみた
- 3. 【Java】ArrayListのメソッドを覚える
- 4. Javaの基礎的な備忘録1
- 5. Javaで「配列をコピーする(シャローコピーとディープコピー)」の動作を確認してみた
- 6. 【Java】ABC081B_ Shift Only #AtCoder
- 7. IBM MQ メッセージング・プロバイダー・アクティベーション・スペックとMQとの接続が切れた場合の再接続の動作
- 8. Spring BootでMyBatisログを出力する
- 9. Java アプリケーション2
- 10. Javaで「配列のすべての要素を指定した値で埋める(fill)」の動作を確認してみた
- 11. (調査中)AJava 11のHttpClientを使用してAWS Cognitoのトークンエンドポイントからトークンを取得する例
- 12. (調査中)Javaの HttpClient を使用したKeycloakからBearerトークンを取得
- 13. メモ
- 14. アプリケーション
- 15. java アプリケーション
- 16. AtCoder Beginner Contest 358 をJavaで解けるところまで
- 17. イミュータブルってなに?
- 18. 【Java】文字列⇔数値の相互変換
- 19. SpringAIを利用してOpenAIのAPIと連携する方法
- 20. 【Java】ABC081A_ Placing Marbles #AtCoder
2つのオブジェクトのフィールド値を全て比較する
備忘録です。
“`java:DeepComparator.java
import java.lang.reflect.Array;
import java.lang.reflect.Field;
import java.util.Arrays;
import java.util.IdentityHashMap;
import java.util.Map;
import java.util.Objects;
import java.util.Set;
import java.util.HashSet;
import java.util.stream.StreamSupport;public class DeepComparator {
public static boolean deepEquals(Object obj1, Object obj2) {
return deepEquals(obj1, obj2, “”, new IdentityHashMap<>());
}private static boolean deepE
Javaで「配列の指定範囲の要素から新しい配列を作成する(copyOfRange)」の動作を確認してみた
# 概要
Javaで「配列の指定範囲の要素から新しい配列を作成する(copyOfRange)」の動作を確認してみました。
以下のページを参考にしました。https://www.javadrive.jp/start/array/index13.html
# 実装
以下のファイルを作成しました。
“`JSample13_1.java
import java.util.Arrays;class JSample13_1{
public static void main(String[] args){
int[] src = {12, 24, 18, 35, 21};
int[] dst = Arrays.copyOfRange(src, 1, 4);System.out.println(Arrays.toString(src));
System.out.println(Arrays.toString(dst));
}
}
“`以下のコマンドを実行しました。
“`
$ javac JSample13_1.java
$ java
【Java】ArrayListのメソッドを覚える
ArrayListが通常の配列と比べて何が違うのか、覚えるための自分用メモです。
# ArrayListとは?
ArrayListは、“`java.util“`パッケージに含まれる“`List“`インタフェースを継承したクラスライブラリで、コレクションクラスの1つです。# サンプルプログラム
ArrayListを使うには、まず以下のように“`import“`文を記述します。
“`java:Main.java
import java.util.ArrayList;
“`
ArrayListをインスタンス化する際は、<>で格納する型を指定します(“`int“`などの基本データ型は不可、“`Integer“`などのラッパークラスは可)。
“`java:Main.java
import java.util.ArrayList;public class Main {
public static void main(String[] args) {
ArrayListnames = new ArrayList
Javaの基礎的な備忘録1
# メンバとは
クラスには属性を表す変数と、
操作を表すメソッドを定義します。
この`クラスに用意した変数やメソッドを総称してメンバと呼びます`。メンバ変数
メンバ変数とはクラス定義の中で下記の部分です。
クラス定義をしている”{“と”}”の中に記述され、そしてメソッドの外に記述されている変数のことです。
“`Java
class Television{
/**これ*/
int channelNo;
String name;
//クラスの中にあり、メソッドの外にあるvoid setChannel(int newChannelNo){
channelNo = newChannelNo;
}void dispChannel(){
System.out.println(“現在のチャンネルは ” + channelNo + ” です”);
}
}
“`では、メンバ変数に直接値を格納するのを禁止し、必ずメソッド経由でしかメンバ変数の値を格納したり参照したり出来ないようにするにはどうすればいいでしょうか。そういった場合はメン
Javaで「配列をコピーする(シャローコピーとディープコピー)」の動作を確認してみた
# 概要
Javaで「配列をコピーする(シャローコピーとディープコピー)」の動作を確認してみました。
以下のページを参考にしました。https://www.javadrive.jp/start/array/index10.html
# 実装
以下のファイルを作成しました。
“`JSample10_1.java
class JSample10_1{
public static void main(String[] args){MyTest[] src = {new MyTest(28), new MyTest(12)};
MyTest[] dst = new MyTest[2];for (int i = 0; i < src.length; i++){ dst[i] = new MyTest(src[i].num); } System.out.println("src[0] = " + src[0].num); // 28 System.out.println("dst[0] = " + dst[0]
【Java】ABC081B_ Shift Only #AtCoder
自分用にAtCoderの解答をまとめていきます。誤った情報があったら、申し訳ございません。
## 覚えること
– setメソッド
Listクラスのsetメソッドは、1つ目の引数は書き換えたいList内の位置を指定し、2つ目の引数は実際の変更の仕方を指定できる。## コード
“`java:ABC049C_Daydream
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;public class ABC081B_ShiftOnly {
public static void main(String[] args) {
try (Scanner sc = new Scanner(System.in)) {
int s = sc.nextInt();
int count = 0;
boolean judge = true;
Listarra
IBM MQ メッセージング・プロバイダー・アクティベーション・スペックとMQとの接続が切れた場合の再接続の動作
[tWAS 9.0 と MQ 9.2 でJMSを動かす #Java – Qiita]( https://qiita.com/keniooi/items/506c913a9d339a10e24e )の環境で実行しています。
### 1.MQを停止
“`
[root@c90105v1 ~]# date; podman stop mq
Tue Apr 30 09:23:30 PM PDT 2024
WARN[0010] StopSignal SIGTERM failed to stop container mq in 10 seconds, resorting to SIGKILL
mq
“`### 2.WASで警告 CWSJY0003W が発生
最大5回、300000ミリ秒おきに再接続が試行される。
秒数と回数は[IBM® MQ リソース・アダプターのプロパティーの構成 – IBM Documentation]( https://www.ibm.com/docs/ja/was/9.0.5?topic=provider-configuring-properties-mq-reso
Spring BootでMyBatisログを出力する
# はじめに
こんにちは、Gakken LEAP のバックエンドエンジニアの Matsuura です。
Spring(Java)でDB操作の処理を実装する際には、MyBatisを採用することが多いですね。
ただ、MyBatisの初期設定では、クエリの実行内容や実行結果が確認できず、正しい結果が得られているかすぐには分かりません。
そのため本記事では、クエリの実行結果をコンソールログとして出力する方法をご紹介します。# 方法
## ディレクトリ構成
ディレクトリ構成は以下の通りとします。
“`text
src/
├─ main/
│ ├─ java/
│ │ ├─ com/
│ │ │ ├─ example/
│ │ │ │ ├─ mapper/
│ │ │ │ │ ├─ HogeDao.java
│ │ │ │ │ ├─ HogeDao.xml
│ ├─ resources/
│ │ ├─ application.yml
“`## 設定内容
対象となる`@Mapper`インターフェイスが格納されているディレクトリに対
Java アプリケーション2
差分比較が遅い場合、いくつかの方法でパフォーマンスを向上させることができます。特に、以下の方法を試してみることをお勧めします:
1. インデックスの作成:
テーブルにインデックスを作成することで、検索と比較のパフォーマンスを大幅に向上させることができます。
2. 適切なデータ型の使用:
テーブルのカラムに適切なデータ型を使用することで、パフォーマンスを向上させることができます。
3. 一時テーブルの使用:
一時テーブルを使用して、データの読み込みや比較を効率的に行うことができます。以下のコード例では、上記の改善を適用しています。
改善したコード例
“`Java
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io
Javaで「配列のすべての要素を指定した値で埋める(fill)」の動作を確認してみた
# 概要
Javaで「配列のすべての要素を指定した値で埋める(fill)」の動作を確認してみました。
以下のページを参考にしました。https://www.javadrive.jp/start/array/index12.html
# 実装
以下のファイルを作成しました。
“`JSample12_1.java
import java.util.Arrays;class JSample12_1{
public static void main(String[] args){
int[] a = new int[3];
Arrays.fill(a, 10);System.out.println(a[0]);
System.out.println(a[1]);
System.out.println(a[2]);
}
}
“`以下のコマンドを実行しました。
“`
$ javac JSample12_1.java
$ java JSample12_1
10
10
10
“`# まとめ
何かの役に立てばと。
(調査中)AJava 11のHttpClientを使用してAWS Cognitoのトークンエンドポイントからトークンを取得する例
## 必要な依存関係の追加
プロジェクトがMavenプロジェクトの場合、pom.xmlに以下の依存関係を追加します。
“`xml
com.fasterxml.jackson.core
jackson-databind
2.13.3
org.apache.httpcomponents
httpclient
4.5.13
“`
## Javaコード例
以下のコードは、Java 11のHttpClientを使用してAWS Cognitoのトークンエ
(調査中)Javaの HttpClient を使用したKeycloakからBearerトークンを取得
“`java
import org.springframework.http.HttpHeaders;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.stereotype.Service;import java.net.URI;
import java.net.URLEncoder;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.nio.charset.StandardCharsets;
import java.util.Map;
import java.util.stream.Collectors;@Service
public class KeycloakService {public Res
メモ
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Arrays;
import com.opencsv.CSVReader;
import com.
アプリケーション
了解しました。以下は、比較元ディレクトリパスと比較先ディレクトリパスを選択し、それぞれを`before`テーブルと`after`テーブルに取り込み、差分を抽出してSJISエンコーディングで`差分.csv`として出力するJava Swingアプリケーションのコードです。
### コード例
“`java
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import ja
java アプリケーション
Java Swingを使ってディレクトリ選択ダイアログを表示し、選択したディレクトリ配下のCSVファイルを同じテーブルにインサートする機能を追加します。このためには、`JFileChooser`を使ってディレクトリを選択する方法を実装します。
以下に、ディレクトリを選択してCSVファイルを同じテーブルにインサートする機能を持つJava Swingアプリケーションの完全なコード例を示します。
### コード例
“`java
import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import
AtCoder Beginner Contest 358 をJavaで解けるところまで
## 概要
AtCoder主催のAtCoder Beginner Contest 358が、
2024年6月15日(土)21時から開催されました。
私は失念しており不参加です。解説なし、時間無制限で解けるところまでやってみます。
## A
“`Java
import java.util.Scanner;public class Main {
public static void main(String[] args) {
var sc = new Scanner(System.in);
String S = sc.next(), T = sc.next();
if(S.equals(“AtCoder”) && T.equals(“Land”)) {
System.out.println(“Yes”);
} else {
System.out.println(“No”);
}
}
}
“`
文字列が2つ入力されるので、比較する。## B
“`Java
import java.util.Scann
イミュータブルってなに?
# イミュータブルとは何か
### 説明
イミュータブル(immutable)とは、「不変」という意味です。
イミュータブルオブジェクトは、インスタンス作成後に内部状態を変更できないオブジェクトを指します。
一度値が設定されると、その値が変更されることがなく、新たに設定し直すこともできません。
### 例
– boolean、int等のプリミティブ型
– String、Integer等のラッパークラス
– java.util.Collectionsの不変コレクションなどがあります。
### 特徴
– 初期化時にのみ値を設定できる
– 設定された値は変更不可
– 値を変更する操作は新しいオブジェクトを生成する### 対比
イミュータブルに対して、ミュータブル(mutable)オブジェクトは、その内部状態を自由に変更できるオブジェクトです。ArrayListやStringBuilder、Calendarなどがミュータブルオブジェクトです。
# なぜイミュータブルオブジェクトを使うのか
イミュータブルオブジェクトを使用する主な理由には以下のものがあります。
#
【Java】文字列⇔数値の相互変換
# はじめに
Javaを学びたくて読み始めた本、「[プロになるJava ―仕事で必要なプログラミングの知識がゼロから身につく最高の指南書](https://www.amazon.co.jp/%E3%83%97%E3%83%AD%E3%81%AB%E3%81%AA%E3%82%8BJava%E2%80%95%E4%BB%95%E4%BA%8B%E3%81%A7%E5%BF%85%E8%A6%81%E3%81%AA%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E3%81%AE%E7%9F%A5%E8%AD%98%E3%81%8C%E3%82%BC%E3%83%AD%E3%81%8B%E3%82%89%E8%BA%AB%E3%81%AB%E3%81%A4%E3%81%8F%E6%9C%80%E9%AB%98%E3%81%AE%E6%8C%87%E5%8D%97%E6%9B%B8-%E3%81%8D%E3%81%97%E3%81%A0-%E3%81%AA%E3%81%8A%E3%81%8D/dp/429712
SpringAIを利用してOpenAIのAPIと連携する方法
今回はSpringの一つのプロジェクトで、SpringAIの紹介とOpenAI社のAPIとの接続方法についてまとめました。
(2024/6/17 現在の内容となります)## SpringAIとは
OpenAIなどの生成AIのAPIとの繋ぎこみを容易にするJavaのライブラリになります。
2024/6/16現在でOpenAI直接だけでなくAzure経由のOpenAIやAmazonのBedrockやGoogle Geminiなどの各種APIとの繋ぎこみが利用できます。対応についてはこちらをご覧ください。
https://spring.io/projects/spring-ai
今回はOpenAIのAPIとの接続方法について説明します。
## OpenAIとの連携準備
今回はGradleで構築して、OpenAIの一番よく使われるチェットのAPIを使って応答を取得する方法です。
OpenAIのAPIキーは事前に順をしておいてください。### 0.準備
ライブラリの読み込み設定を定義します。gradleの設定は以下の通りです。
SpringBootも利用して実行するサンプルの
【Java】ABC081A_ Placing Marbles #AtCoder
自分用にAtCoderの解答をまとめていきます。誤った情報があったら、申し訳ございません。
## 覚えること
– charAtメソッド
文字列からn番目の文字列を引き出すためのStringクラスのメソッド。文字列の先頭は0文字目。## コード
“`java:ABC081A_PlacingMarbles
import java.util.Scanner;public class ABC081A_PlacingMarbles {
public static void main(String[] args) {
try (Scanner sc = new Scanner(System.in)) {
String str = sc.next();
System.out.println(cal(str));
}
}public static int cal (String str) {
int count = 0;
for (i