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

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

Java で Azure App Service の Azure AD 認証の JWT からユーザー情報を取得してみた

## 背景と目的

Azure App Service は Azure AD 認証が簡単に追加できるので、Web アプリ側で認証機能を実装しなくて済みます。とはいえ Web アプリ側の機能として、認証済みのユーザーを識別して動作させる必要があったりします。そんな時は、認証後のリクエストヘッダーに JWT が挿入されるので、これを利用してユーザー情報を取得します。

## 前提条件

“`bash:bash
# Mac 上で検証しました
bash-3.2$ sw_vers
ProductName: macOS
ProductVersion: 13.1
BuildVersion: 22C65

# Java の情報です
$ java -version
openjdk version “11.0.10” 2021-01-19
OpenJDK Runtime Environment AdoptOpenJDK (build 11.0.10+9)
OpenJDK 64-Bit Server VM AdoptOpenJDK (build 1

元記事を表示

SonarLintからRSPEC-3305のご指摘受けたのですぐ対応しちゃいましょう

# SonarLintのエラー
業務でコーディングしていたら、SonarLintが下記のご指摘をしてくれました。
`Inject this field value directly into “sqlSessionFactory”, the only method that uses it`

# エラー発生時のコード

一部抜粋です。

“`java
@Autowired
private ApplicationContext context;

@Bean(name = “sqlSessionFactory”)
public SqlSessionFactory sqlSessionFactory(
@Qualifier(“datasource”) DataSource dataSource) throws Exception {
SqlSessionFactoryBean sqlSessionFactoryBean = new SqlSessionFactoryBean();
sqlSessionFactoryBean.setDataSource(dataSourc

元記事を表示

UPDATEしないイミュータブルなテーブル設計

# 記事の目的

私が普段携わるプロジェクトでは、以下の理由からプログラムコードだけでなくデータベースも可能な限りイミュータブルを意識して設計している。

– プログラムコードだけでなく、データだってイミュータブルのほうが安全
– 登録時も更新時もデータベース操作はほとんど同じ手続きになるので処理がシンプルになる
– 更新日時カラムに意味を感じない
– 最後の更新タイミングしか表現できないしどの情報がどう変わったのかもわからない
– だからといって履歴テーブルはヤダ
– 履歴を登録するのはデータ登録の前なのか後なのかとかくだらないことで悩みたくない
– そもそも登録処理の途中で落ちたら履歴は残るのか?とか
– 多くの場合DBのトランザクションを無くせる可能性がある
– これについては別途また記事を書きたい

イミュータブルなテーブル設計のデメリットとして、一般的なテーブル設計よりもテーブル数が増えるのでSELECTが複雑になりがちとか、レコード量が膨大になりがちとかあるので、ありとあらゆるテーブルにおいてイミュータブルな構造にすべきとは思わないものの、一

元記事を表示

Thread class

start methodでthread start
run methodが処理。
いつ動くかはjvmに任せられている。

“`java
@Override
public void run() {
super.run(); // Generated from nbfs://nbhost/SystemFileSystem/Templates/Classes/Code/OverriddenMethodBody
System.out.println(“run”);
}

@Override
public synchronized void start() {
super.start(); // Generated from nbfs://nbhost/SystemFileSystem/Templates/Classes/Code/OverriddenMethodBody

元記事を表示

【備忘録 AtCoder】アルゴリズムによって計算時間が大きく異なる二つのコード

# 問題
[ABC281](https://atcoder.jp/contests/abc281/tasks/abc281_c “問題を開く”)

# 実行が間に合わなかったコード
“`java:Main.java
import java.util.Scanner;

public class Main{

public static void main(String[] args){

Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
long t = sc.nextLong();
int[] time = new int[n];
for(int i=0; i

元記事を表示

UnaryOperator interface

given argument, return が同じtype
default void replaceAll​(UnaryOperator operator)
“`java
UnaryOperator u = (x) -> x + “,”;
System.out.println(u.apply(“3”));

ArrayList l = new ArrayList<>();
l.add(“1”);
l.add(“2”);
l.replaceAll(u);
for(String str:l){
System.out.println(str);
}
“`
“`
3,
1,
2,
“`

元記事を表示

int → string

“`java
public class Outer {
public static void main(String[] args) {
String s = String.valueOf(11);
System.out.println(s);
}
}
“`
“`
11
“`

元記事を表示

Function interface andThen method, compose method

f1.andThen(f2)は、f1,f2
f1.compose(f2)は、f2,f1

下記の例
fc1 integer→string, string→integer
fc2 string→integer, integer→string

“`java
public class Outer {
public static void main(String[] args) {
Function f1 = x -> String.valueOf(x + 2);
Function f2 = x -> Integer.valueOf(x) * 2;
Function fc1 = f1.andThen(f2);
System.out.println(fc1.apply(5));
System.out.println(f1.andThen(f2).apply(5));
Function

元記事を表示

Function interface

Interface Function\
Type Parameters:
T – the type of the input to the function
R – the type of the result of the function

given argumentに対し処理を行い、結果を返す
下記の例はgiven stringのlengthを返す

“`java
public class Outer {
public static void main(String[] args) {
Function f = x -> x.length();
System.out.println(f.apply(“abc”));
}
}
“`
“`
3
“`

元記事を表示

Java Silver を受験した時の話

正式名称『Oracle Certified Java Programmer, Silver SE11』というやつ。
2022年11月にOracle Java Silverに合格したのでその受験までの勉強期間と、難しかった知識についてまとめていく。

![スクリーンショット 2022-12-31 17.19.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3077345/f7d8a823-b5b8-a4b9-8eb5-b7f79b6aecb4.png)

受験前はもうSE 17が出るんじゃないかと思っていたが2023/1/10現在まだリリースされていない。

# 目次
受験までの期間について
受験した感想
難しかったことベスト3

# 受験までの期間について
– **受験時の肩書き**
– 新卒1年目
– 開発未経験
– **なぜ受験したか**
– 就活時はエンジニア志望でJavaという言語が日本で広く普及していることをしり、資格試験をベンチマークにしようと思ったか

元記事を表示

Predicate interface

test methodは、引数に対し、booleanを返す。

“`java
public class Outer {
public static void main(String[] args) {
Predicate p1 = x -> x > 0;
Predicate p2 = x -> x > 100;
Predicate p3 = p1.or(p2);
System.out.println(p3.test(50));
}
}
“`
“`
true
“`

元記事を表示

【初心者専用】ガベージコレクションについて

# 0. はじめに
新卒社員がJavaを初めて学習している際の備忘録のようなものです。超入門だと思うので同郷を救いつつ自分の知識も再確認といったところで、今回初耳だった「ガベージコレクション」について問題を通してまとめました

# 1. ガベージコレクションについて
ガベージコレクションとは「メモリ上使われなくなったインスタンスを探し、見つかればそのインスタンスを探し、見つかればそれを破棄しメモリを開放すること」です。

そのガベージコレクションのタイミングが問われるのが以下の問題になります

“`java
public class Main {
public static void main(String[] args) {
Object a = new Object(); //A
Object b = new Object(); //B
Object c = a;

a = null;
b = null;

}
}

“`
上記のプログラムを実行し、7行目が終了したときにガベージコレクションの対象となるインスタンスはどれか?

1. A
2. B
2

元記事を表示

Consumer interfaceを使用してconstructorの引数追加の影響を減らす

constructor使わずbuilderでinstance生成する
builderにItemと同じフィールドを持たせる
builderに値設定するロジックをconsumerとして引き渡す
builder内部でconsumer実行
builder内容でItemを生成するコンストラクタ実行

“`java
class Item {
private int price;
private String name;
public Item() {}
private Item(Builder build) {
this.price = build.price;
this.name = build.name;
}
public String toString() {
return “name:” + name + ” price:” + price;
}

static class Builder {
int price;
String name

元記事を表示

機械学習、Java、GridDBを用いた糖尿病予測

本記事では、世界中の多くの人々のライフスタイルを動かしている糖尿病という健康管理の悩みを取り上げます。この記事では、予測システムを作成するための機械学習モデルの使用方法を説明します。このモデルは、ランダムフォレストを使用して、患者が糖尿病であるかどうかを予測します。この記事では、データベース**GridDB**をセットアップするために必要な要件を概説します。その後、我々のデータセットとモデルについて簡単に説明します。最後に、結果を解釈し、我々の結論を出します。

[全ソースコードはこちら][1]

## 必要条件

**GridDB**データベース・ストレージ・システムは、ランダム・フォレスト・モジュールを構築する際のバックアップメモリ・リソースとなります。**GridDB**を完全に機能させるには、ダウンロードし、オペレーティングシステムに設定する必要があります。

必ず以下のコマンドを実行して、必要な環境変数を更新してください。

“`sh
export GS_HOME=$PWD
export GS_LOG=$PWD/log
export PATH=${PATH}:$GS_HOM

元記事を表示

日付と時間の文字列を取得するには

“`java
DateTimeFormatter dtf = DateTimeFormatter.ofPattern(“yyyy-MM-dd,HH-mm-ss,SSS”);
Instant v1 = Instant.now();
ZonedDateTime v2 = v1.atZone(ZoneId.of(“Asia/Tokyo”));
String s1 = v2.format(dtf);

System.out.println(s1);
“`

“`java:System.currentTimeMillis()の場合
long g1 = System.currentTimeMillis();
Instant v1 = Instant.ofEpochMilli(g1);
“`

本当はCodeSandboxでサンプル実行出来るようにしたいけど、諦めました。

元記事を表示

Java springとspringbootの違いをまとめてみた

## そもそもフレームワークとは
– アプリ開発をする際に、開発の効率を上げるために便利な機能がたくさん詰まっているツール。

## Spring Framework
javaのWEBフレームワークで、WEBアプリを作成することができる。
フレームワークの集合体 

## Spring Boot
spring bootはspring Frameworkの機能の使い分けが困難という欠点を解消するために作られたフレームワーク。
主な機能として、複数のフレームワークを使用する際に発生する、Bean定義やXML設定などを、可能な限り自動設定する機能が搭載されている。そのほか、コードを書かなくてもプログラム処理ができるように「、Javadocと同じくアノテーションが記述できる点も特徴です。Spring MVCのフレームワークの仕様を踏襲して作成しており、Spring Frameworkを構成するフレームワークの一つとして組み込まれている。

## spring frameworkとspring bootの違い
– spring framework:Java言語のアプリケーション開発のために作られ

元記事を表示

Java アクセス修飾子の使い方とカプセル化

## アクセス修飾子
クラスやフィールド、メソッドヘのアクセスを制御するための修飾子をアクセス修飾子という。アクセス修飾子には、public 、protected、privateの3種類がある。
これらをクラス、フィールド、またはメソッドの宣言の前につけることで、次の表 のようなアクセス制御を行える。(○アクセス制御を行える範囲)
| アクセス修飾子 | 同クラス | 同パッケージ | サブクラス | 他 |
| — | — | — | — | — |
| public | ○ | ○ | ○ | ○ |
| protected | ○ | ○ | ○ | |
| (なし) | ○ | ○ | | |
| private | ○ | | | |

クラスにつけられる修飾子はpublicのみ。また、複数のクラスの宣言を1つのファイルの中に記述する場合、public修飾子をつけられるクラスは1つだけ。

“`:例文
 class Student{
private int score;
public void setScore(int s){

元記事を表示

lamda expressionをfunctional interfaceに

lamda expressionはmethodそのものを表していて
method reffereceのように扱える

以下はfunctional interfaceのFactoryInterface#get()に対して
外部からlamda expressionを代入して、切り分けすることにより
SampleClassA⇒SampleClassBに変更した際に、businessLogicに影響を与えない

“`java
interface FactoryInterface{
T get();
}
interface SampleInterface{
void method();
}
class SampleClassA implements SampleInterface {
public void method() {
System.out.println(“I am SampleClassA method”);
}
}
class SampleClassB implements SampleInterface {
pub

元記事を表示

Supplier interface

functional interface
T get() methodを持つ
lamda expressionでdefineして使う

“`java
public class Outer {
public static void main(String[] args) {
Supplier s = () -> “lll”;
String str = s.get();
System.out.println(str);
}
}
“`
“`
lll
“`

元記事を表示

enum

Enum classのsub classとなる
each elementがjvmによりinstance化される

“`java
enum EnumSample{
PAN(“hello”),GOHAN(“hello”);
String value;
private EnumSample(String value) {
System.out.println(value);
this.value = value;
}
public String toString() {
return value;
}
}
enum EnumSample2 {
APPLE,ORANGE
}
public class Outer {
public static void main(String[] args) {
System.out.println(EnumSample.PAN);
Enum e = EnumSample2.valueOf(“APPLE”);
System.

元記事を表示

OTHERカテゴリの最新記事