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

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

Javaを使用してExcelでピボットテーブルを作成する方法

Excelシートで処理すべきデータが多すぎて、各セルのデータをまとめる必要がありながら、1つずつ計算するのが面倒くさい場合は、ピボットテーブルを使用してすばやくまとめできます。そしてこの記事の内容では、Javaプログラムを使用してExcelテーブルのデータに基づいてピボットテーブルを作成する方法を紹介します。

##環境への下準備
ExcelクラスライブラリツールであるFree Spire.XLS for Javaを使用する必要があります。ここでは無料バージョンを使用します。公式WebサイトからJarパッケージをダウンロードして解凍し、手動でSpire.Xls.jarをライブラリにインポートできます。フォルダをJavaプログラムに追加します。

##Javaコード一覧

“`
import com.spire.xls.*;

public class CreatePivotTable {
public static void main(String[] args) {
//Excelテストドキュメントを読み込む
Workbook wb = ne

元記事を表示

JNAでデスクトップフォルダのパスを取得してみた

## これまでのあらすじ
いまさらJavaでGUIやらなきゃになったんだけれど、デスクトップフォルダのパスってどう取ればいいのん?

## 失敗したやつ

“`java:
System.out.println(System.getProperty(“user.home”), “Desktop”);
“`

ぐぐるとよく出てくるやつなんだけれど、OneDriveとか入ってるとこれじゃあダメなのね。やだめんどいー!

## ちょっともやっとするやつ

Runtime.exec()でレジストリ読む方法。このパスどのくらい汎用性あるのかわからないんですが。
“`java:
public static void regTest() throws IOException {
String cmd = “reg query \”HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders\” /v Desktop”;
Process process = Runtime.getRuntime().exe

元記事を表示

「はじめての Django アプリ作成」をSpring WebFluxでやってみた、その 2

# はじめに
この記事はDjangoの公式チュートリアル[「はじめての Django アプリ作成」](https://docs.djangoproject.com/ja/4.0/intro/tutorial02/)と同じものをSpring WebFluxで作成することでDjangoとSpring WebFluxの違いを理解することを目的としています。

# 違い一覧
DjangoとSpringでは同じコンセプトでも用語が結構違います。

|Django|Spring|
|:———–|:————|
|Model(モデル)|Model(モデル)|
|Template(テンプレート)|View(ビュー)|
|View(ビュー)|Controller(コントローラ)|

# はじめてのアプリ作成、その 2

## Database の設定

### Django
`mysite/settings.py`の`ENGINE`に`django.db.backends.sqlite3`と定義されている通り、デフォルトでSQLite3を使います。データは`db.sqlite

元記事を表示

「マイクロサービスパターン」の復習 7章

## 概要

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

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

## 7章 マイクロサービスアーキテクチャでのクエリーの実装

– テーマはマイクロサービスアーキテクチャでいかにしてクエリーを実現するか

## API Compositionパターン

– 各マイクロサービスの手前にComposerを立てて、ComposerがAPIをクライアントに公開しつつ、各マイクロサービスに必要なクエリーを発行する
– API GatewayにComposerを埋め込むなり、独立サービスにするなり、役割分担は色々選択肢がある
– 例)ComposerはクライアントにfindOrder()を提供するために、Order、Kitchen、Deliveryなどのマイクローサービスを呼び出して、得られた情報を結合した結果を返す
– 利点:直感的で分かりやすい
– 欠点:ComposerでJoinの処理をするので、大量データを扱うのは難しい

## CQRS(Command Quer

元記事を表示

【メモ】DAOパターンのファイル一例【Java】

##

“`java:TaskDaoImpl
@Repository
public class TaskDaoImpl implements TaskDao {

private final JdbcTemplate jdbcTemplate;

public TaskDaoImpl(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}

@Override
public List findAll() {

String sql = “SELECT task.id, user_id, type_id, title, detail, deadline, ”
+ “type, comment FROM task ”
+ “INNER JOIN task_type ON task.type_id = task_type.id”;

//削除してください

//タスク一覧をMapのListで取得
List> r

元記事を表示

Tomcatを強制的に終了する方法

./shutdown.sh を実行してもTomcatが終了できない場合は、

“`ps -A | grep java“`

または

“`lsof -i -P | grep 8080“`

を実行する。

表示されたプロセスIDを指定してkillする。

“`kill -9 プロセスID“`

または

“`kill -15 プロセスID“`

これでTomcatを終了できます。

元記事を表示

【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位まで出力する場合、
“`

元記事を表示

OTHERカテゴリの最新記事