JAVA関連のことを調べてみた2022年02月21日

JAVA関連のことを調べてみた2022年02月21日
目次

【Java】enumでcontainsメソッドっぽく指定した値が存在するか判定する

# はじめに

Javaで`enum`を利用する際、メンバ変数を宣言することが可能ですが、
**指定した文字列や値、インスタンスがenum内に含まれているか?** という

* **Collectionクラスのcontainsメソッド** 
* **MapクラスのcontainsKey/containsValueメソッド**

のようなメソッドに関しては自前で実装する必要があります。
実装自体は難しくないですが、調べても意外と出てこなかったため備忘録として残します。

# 今回利用するenum
“`Java:enum
public static enum Department {
SALES(“1″,”営業部”),
PERSONNAL(“2″,”人事部”),
DEVELOPMENT(“3″,”開発部”);

private final String departmentCode;
private final String departmentName;

Department(String depar

元記事を表示

【 Java_さまざまな命令 】

Javaを学習中の初学者です。
備忘録としての投稿になります。

#Javaのさまざまな命令7種
Javaにはさまざまな種類の命令があり、今回はその中でも代表的なものをピックアップしました。
####①System.out.println(引数)
画面に文字を表示させる命令
例えば、

“`java
String name = “龍一”;
System.out.println(name);
“`
の実行結果は「`龍一`」になります。

####②System.out.print(引数)
改行をせずに画面に文字を表示させる命令
例えば、

“`java
System.out.print(“私は”);
System.out.print (“龍一です”);
“`
の実行結果は「`私は龍一です`」になります。

#### ③int a = Math.max(a, b)
引数①・②の二つを比較して大きい方の数値を代入する命令。
例えば、

“`java
int a = 5;
int b = 10;
int x = Math.max(a, b);
System.out.println(

元記事を表示

ドメイン駆動設計入門 Chapter 12 ドメインのルールを守る「集約」 – 集約とは を読んで

4ヶ月ほど前から、[ドメイン駆動設計入門 ボトムアップでわかる!ドメイン駆動設計の基本](https://www.seshop.com/product/detail/20675)の輪読会に参加しています。[昨年11月にChapter 2を担当した](https://qiita.com/flyaway/items/305df0382d9a284820b6)のに続き、「Chapter 12 ドメインのルールを守る『集約』」を担当することになりました。このため、自分なりに理解した内容と感想をまとめました。

**注意:本記事は、あくまでも筆者の理解をまとめたものです。**正確な解説を知りたい場合は、書籍や別の記事などをご参照ください。

https://www.seshop.com/product/detail/20675

本書で取り扱われているサンプルコードのプログラミング言語はすべてC#が採用されています。しかし、筆者はC#に触れた経験がないため、本記事内におけるソースコードはすべてJavaを採用しました。

# こんなコードはありませんか?

新しいクラスを作成したときに、「フィール

元記事を表示

Javaの基本的なデータ型の操作についてまとめてみた

Javaシルバーの勉強をしていて、Javaの基本的なデータ型の操作で詰まったので、ここで解決していきたいと思います。
問題を解いていたら本当に正解率が悪かった。。

なのでまとめて見ようと思います。

# Javaの基本的なデータ型の操作

##ラッパークラス

Javaの型には参照型と基本型があるのですが、基本型では主に数値を用いた計算や数値や文字を格納する働きがあります。
しかし、Javaでは格納した値を操作するやり方がありません。
そんな時に使うのがラッパークラスです。

ラッパークラスをつかうことで、基本型をオブジェクトとして扱うことができるようになり、操作をすることができます。

|基本型 |ラッパークラス |
|—|—|
|boolean |Boolean |
| byte |Byte |
| char |Character |
| short |Short |
| int |Integer |
| long |Long |
| float |Float |
| double |Double |

上記に挙げられている型の基本型は、

元記事を表示

Spring MVCのsuspendなControllerを実行するとInterceptorやContollerAdviceが複数回実行されてしまう

バージョン情報

* Spring Boot: 2.6.3

Spring MVCではKotlinのコルーチンがサポートされています。

Controllerのhandler関数にsuspendをつけると、Springがコルーチンを起動してhandler関数を実行してくれます。

“`kotlin
@RestController
class DemoController {
@GetMapping(“suspend”)
suspend fun indexSuspend(): String {
return “suspend handler is executed.”
}
}
“`

このようにhandler関数にsuspendをつけると、Controllerの前段にあるInterceptorやControllerAdviceが複数回呼び出されてしまいます。

シーケンスは以下のような感じです。

![](https://raw.githubusercontent.com/nyandora/universal-static-resources/

元記事を表示

Javaのモジュールについてまとめてみた

Javaのモジュールシステムについてまとめてみました。

Java9から実装された機能なのでかなり古いですが、やってみます。

# Javaのモジュールシステムとは

“`
・パッケージの依存関係を簡潔に整理させる
・パッケージのアクセスを制御することができる
“`

これらの利点を得るためにJava9で実装されたものです。
これにより、不用意に他のプログラムからのアクセスを拒否することができます。そうして
「え、このコード動かして実装してみたら他のところでバグが起きちまった!クソスパゲティーコードが!!!!」
といったことがなくなります。筆者もmoduleではないですが、コードを書いていたら別のところがバグってしまい、「そこにアクセスするんじゃねぇよ」と思った経験があります。
そういたことを防ぐためにあるわけですね。

Java9よりも細かくアクセスできるスコープを設定できます。具体的には

“`
・今作業しているモジュールの中でだけpublic
・指定したモジュールに対してだけpublic
・すべてのモジュールに対してpublic
“`

ということができます。

そして、

元記事を表示

「マイクロサービスパターン」を読む会 第7回

– Java読書会の自分メモ
– せっかく勉強したのにつぎつぎと忘れておくので、印象に残ったところでも記録していく

http://www.javareading.com/bof/

## 8.3.3 GraphQL を使った API ゲートウェイの実装

– API GatewayをGraph QLで実現する話
– クライアント側でqueryの内容を変えられるので、graph qlのエンドポイントを一つ作るだけで様々な用途に対応できる
– rest apiだと、多少はパラメータ化できるものの、普通はいくつものapiをつくることになる
– GraphQL スキーマ

“`
type Query {
orders(consumerId : Int): [Order]
order(orderId : Int): Order
consumer(consumerId : Int): Consumer
}

type Order {
orderId: ID,
consumerId : Int,
consumer: Consumer
restaurant: Res

元記事を表示

Spring Data JPAでJPQLを書かずにJOINさせる

## 概要
Spring Data JPAで`findAll()`、`findById(id)`実行時にJOINさせるようにし、N+1問題が起きないようにする。
JPQLは使わないで実現する。

## Service
以下のようにそれぞれを呼び出す。以下の例ではpagingを実装しているが、していない場合でも同じ。

“`java:UserService
@Service
@RequiredArgsConstructor
public class UserService {

private final UserRepository UserRepository;

public Page findAll() {
// paging
Pageable limit = PageRequest.of(0, 10);
return UserRepository.findAll(limit);
}

public Optional findById(Long id) {

元記事を表示

Firebaseのオフライン機能の記述場所によりマルチウィンドウ切り替え時にアプリが落ちるてハマった件

加速度センサーのデータを長時間記録するアプリを作っており、データ保存先はrealtime databaseです。掲題の通りなのですが、realtime databaseを利用すると、一旦スマホのwifi接続がきれても、アプリがオフラインでデータを保存してくれていて、次にwifiが繋がった時にサーバーに送信してくれるという、1行書くだけでお任せの超ありがたいオフライン機能があるそうな。

https://firebase.google.com/docs/database/android/offline-capabilities?hl=ja

そこでそいつを実装するために例えばアクティビティの「recording.java」あたりにFireBase非同期処理のお願いとして

FirebaseDatabase.getInstance().setPersistenceEnabled(true);

などと記述するのですが、しかーし、こいつのせいでマルチウィンドウ切り替え次にアプリが落ちることが判明。

■対応:計測前にセンサーをペアリングするための設定画面の段階で非同期処理を設定したら、解

元記事を表示

Javaによる添付ファイル付きのメール処理

# ビジネスシーンでは電子メール処理は現役

前回の記事 https://qiita.com/sev01/items/6c8ea0c1a82324341fdd ではメールの送信をしましたが、受信したメールを保存し、そこからデータを抽出することは日常業務の中でよく使われます。

# マルチパートって色々あります

マルチパートの中に、さらにマルチパートとなっていることがあります。
つまり、入れ子になっていることがあるため、ある種の再起処理が必要になります。

# 添付ファイルの名前が文字化けする問題に遭遇

JavaMailのMimeUtility.decodeText を利用します。

# 例

“`java

package mailreceivetest;

import java.io.BufferedOutputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import j

元記事を表示

【AndroidStudio】Intentで起動元に値を返す方法(ActivityResultLauncher)

#はじめに
AndroidでIntentを扱っていると、MainActivityから何かしらのActivityを呼び出して、呼び出したActivityが終了したら戻り値を受け取ってMainActivityで処理したい場面が良く登場します。ActivityResultLauncherというクラスを利用すれば可能のようですが、公式ドキュメントもQiitaの記事も優しくなかったりして意外と手間取ってしまったので、めちゃくちゃ優しく書いていきます。例のごとく、Javaしか書けないのでJavaで、、、

#戻り値のないIntentのプログラム
まずはベースとなるプログラムを確認していきます。MainActivityで個数を指定して、SubActivityで個数を受け取って表示し、戻るボタンを押したら何もせずにMainActivityに戻り、確定ボタンを押したら個数を返してトーストで表示し、個数をリセットするというプログラムにします。もちろん戻り値なしのものを作るため、SubActivityからMainActivityに値を渡せずに、どっちのボタンを押してもただMainActivityに戻るだけに

元記事を表示

ヒュベニの公式(Hybeny’s Distance Formula)を使って緯度経度間の距離を算出する

緯度経度間の直線距離は、地球が楕円型の所為でそれほど平面上の座標の距離ほど簡単に算出できない。
そのため、緯度軽度間の距離を計算するにはいくつかの方法があるらしいが、
最初に見つけた以下のJavaのサンプルコードが私の用途に削ぐわない結果が出たので、
別の方法を調べた。

https://qiita.com/niwasawa/items/5128101ef93a56e8a6af#java

それがヒュベニの公式(Hybeny’s Distance Formula)を使った方法である。
こちらの実装例を紹介するページは多かったが、Javaはぱっと見つからなかったので、
書いてみた。
尚、ヒュベニの公式を使った距離の精度は近い位置だとそれらしい結果だったが、
距離が離れていると誤差が大きそうだった。
とはいえ、私の用途だと大きな問題なさそうだ。

“`java
double distance(final double latitude1,
final double longitude1,
final double lati

元記事を表示

Geohashについて(Javaの変換サンプル付き)

# Geohash とは

Geohash は、Gustavo Niemeyer が geohash.org というWebサービスを作成中に発明した、
ジオコーディング方法の一つ。
Geohash を使うと地球を矩形単位で分割して、それをBase32のハッシュで表すことができる。

## geohash は何が便利?

* 矩形のサイズは桁数に比例して変わり、10桁になると0.59m × 0.97mなので、実質的に位置として扱える。
* 矩形単位で位置情報を管理できる。
* 一定範囲ごとのグループ化などがし易い。例えば上位5桁なら4872.66m × 3955.08mの、上位4桁なら19490.62m × 31640.62mの範囲でグループ化できる。
* 上位の桁が同じ場所は近い位置にある。
* 前方一致検索ができる。
* 曖昧な検索ができる。

# Geohashの仕組み

緯度軽度はそれぞれ-90〜+90、-180〜+180の範囲がある。
geohashでは、それを交互に分割していく。
例えば緯度経度が `35.68, 139.70` の場合

1. `139.70`

元記事を表示

Javaで重複した順位付けをする方法

# Javaで順位付けする方法
どうやって順位付けを行うのか、考えたことはありますか?
結構コードを書いていて、最初はぐちゃぐちゃしたものになってしまっていたので、自分で試してみた方法を上げてみたいと思います。

# 環境
– java14

# 使用させていただいたデータ
[ワインの評価データ](https://domohelp.domo.com/hc/ja/articles/360043931814-%E6%A5%BD%E3%81%97%E3%81%BF%E3%81%AA%E3%81%8C%E3%82%89%E5%AD%A6%E3%81%B6%E3%82%B5%E3%83%B3%E3%83%97%E3%83%AB%E3%83%87%E3%83%BC%E3%82%BF%E3%82%BB%E3%83%83%E3%83%88)

今回はワインの評価データのポイントが高い上位30番以内のデータを出力します。
同率順位も可能性としてはあるので、この場合は30個を超えることもあります。
例えば、ポイントが2,2,3,3,5,5,8,8,8,9,12であり、この上位3位まで出力する場合、
“`

元記事を表示

SNSのアカウント名を勝手に作ってくれるアプリを作ってみた

##作ってみた経緯
SNSなどでアカウント名をつけるのがめんどくさいなあと思う時があったので、Javaの復習とHerokuへのデプロイ練習をしたかったので、取り組んでみました。

##作ってみたものでできること
入力した内容から、ランダムでアカウント名を作成できます。
記入する内容は、姓、名、生年月日(姓名はローマ字であればなんでも、生年月日は未来日でなければどの日付を指定しても大丈夫です。)

####<トップページ>
[![Image from Gyazo](https://i.gyazo.com/161beabe779d024a59f47de911cb15ae.png)](https://gyazo.com/161beabe779d024a59f47de911cb15ae)

####<実行結果>
[![Image from Gyazo](https://i.gyazo.com/2cb82dabe28e2ebcef4d76f530a622f7.png)](https://gyazo.com/2cb82dabe28e2ebcef4d76f530a622f7)

##作ってみた感想

元記事を表示

関数型インターフェースについて学習したのでまとめてみた。

Javaの関数型インターフェースについて学習したのでまとめてみます。

# 関数型インターフェースとは

関数型インターフェースとは、抽象メソッドを持ったインターフェースです。
役割としては、

“`
抽象メソッドを一つだけドを一つだけ持っているもの。l
そして、その抽象メソッドはラムダ式等を使って呼び出していきます。
“`

そもそものインターフェースとは、開発においてどこのクラスでも必要なメソッドをまとめて置くためのものです。そして、関数型インターフェースは、抽象メソッドを一つだけ定義しているインターフェースです。
抽象メソッドとは何かというと、処理の内容が無いメソッドです。

# 関数型インターフェースの書き方

“`Sample.java
public interface SampleInterface {
public void Sm1(String sample);
}
“`

このように、インターフェースの中に抽象メソッドを定義します。
さらにわかりやすく書くやり方もあります。

それは、アノテーションを宣言することです

“`Sample.java
@

元記事を表示

【Spring Data JPA】主キーが重複した複数のデータをsaveAll()で登録すると・・・

現在参画している案件でJava使い、開発を行っています。
そこでsaveAll()を用いてデータを登録する機会がありました。
しかし、実際にテストで動かしてみると3件データを登録できるはずがなぜか1件しか登録が出来ていなかったのです。

#原因
テスト自体は通るのですが、エラーで落ちてはいない・・・
なぜ登録できなかったのか、それは**重複した主キーを複数のデータに登録していたから**です。
実は開発中のAPIの仕様が曖昧なところがあり、””(空文字)で指定しておいてくださいと指示を受け、主キーに全て空文字を登録するようなロジックを作成していたことが原因でした。
(そもそも主キーに空文字を登録する時点で気づくべきだった・・・)

しかしここで、また1つ疑問が浮かびました。
なぜ、**重複した主キーなのにデータを登録できているんだろう???(しかもなぜか1件だけ)**
その答えはsaveAll()の仕様にありました。

#saveAll()の仕様
どうやらsaveAll()は
**①登録する際に重複する主キーがなかったら登録(insert)**
**②登録する際に重複する主キーが

元記事を表示

初心者でもわかる関数型インターフェース(UnaryOperator編)

##はじめに
皆さんはUnaryOperatorについてご存知でしょうか。UnaryOperatorを使用すれば、一律の処理をキュッとまとめることが出来ます。例えば、リストの文字列を全て大文字にするなど使い方次第で色々なことが出来ます。JavaGoldの試験の出題範囲でもあります。そんな、UnaryOperatorについて解説していきます。

##UnaryOperatorとは
UnaryOperatorとは、1つの値を処理して同じ型の処理を戻す処理を表す関数型インターフェースです。例えば、String型の引数を受け取ったら、戻り値もString型の処理を戻すというイメージです。UnaryOperatorは、Funcitionインターフェースのサブクラスで、抽象メソッドであるapplyメソッドを実装しています。それでは、サンプルコードを通して、使い方を解説していきます。

##どのように使うの?
以下のコードは、String型の引数を受け取ってその引数に変数strを加える処理です。
そしてapplyメソッドを使用して、UnaryOperatorで実装した処理を呼び出します。

“`S

元記事を表示

JavaCV(OpenCV)で画像変換を行いたい

## 概要
 javaで画像変換を行いたいなと思い、色々と調べていたら**JavaCV**がメジャーぽかったので、こちらを使用することにしました。**OpenCVをjava用にラッパーしたもの**の様です。OpenCVと言うとpythonのイメージしかなかったのですが、プログラミング言語は[C++](https://ja.wikipedia.org/wiki/OpenCV)で、javaでも使えるみたいですね。

## 画像のフォーマットについて
 画像のフォーマットは、**WebP**(ウェッピー)が割と新しいと言うことが分かりました。最近は、[**AVIF**](https://ics.media/entry/201001/)と言うのも出てきているみたいで、トレンドが速いなと思いましたが、まだ、OpenCVでは対応していないみたいです(多分)。「**画像の読み込み速度は、売り上げに直結している。**」みたいは記事もどこかで見かけたし、重要みたいですね。

[アマゾンのページ表示速度を劇的に改善した6つの実践テクニック【SEO情報まとめ】](https://webtan.impress

元記事を表示

GradleやMavenとは

# Springプロジェクト作成時の選択項目
Springプロジェクト作成の時いつも
「GradleかMavenか」
を選ぶことになります。一体なんのことなんでしょうか。

そもそもSpringプロジェクト作成の時に選ぶ選択項目のほとんどを理解してない私ですが、
「最初Gradleで作成したら上手くいかなくて、Mavenにしたら動いた!」
と言うこともあったので調べておこうと思いました。

# サーバ起動と同時にコンパイルしてくれる便利なやつ
正体はJavaクラスからJARファイルやWARファイルを作成してくれるコンパイラーです。
https://tech-lab.sios.jp/archives/9500

Mavenの特徴はXMLファイルでビルドの手順を記述することです。
ビルドにMavenを選択した際は、pom.xmlというファイルが作成されるので、そこに必要なライラブリを記述します。
ビルドを実行するとここに記述されたライラブリをMavenリポジトリからダウンロードしてくれるのです。

GradleはMavenほど有名ではありませんが
最近人気になってきているようです。

これ

元記事を表示

OTHERカテゴリの最新記事