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

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

【Springboot】HTMLと@RequestPramで簡単に検索機能を実装する。URLへパラメータを設定し、ページ間で値を受け渡しする

# 1. はじめに
写真管理アプリを制作する中で、キーワードを用いた検索機能を実装したかったです。
ブラウザの履歴に残るよう検索毎に URL を分けたかったので、URL にパラメータを含めるのが理想でした。
結果的に `http://hogehoge.com?fruit=apple`のような URL を作成し、そのパラメータを次の画面に渡すことができたので、まとめました。

# 2. 対象読者
– 検索機能を実装したい方
– ブラウザに検索履歴を残したい方( URL にパラメータまで含めることによって、ブラウザの履歴も細分化される)
– HTML と Springboot で素早く実装したい方(JavaScript は使わない)

# 3.結論
下記の通り実装すれば OK です。
完成後イメージは下図の通りです。
![Qiita図解|パラメータを用いた検索機能.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/675074/c7944cfa-79dd-66b8-7fd4-b1c77cabb684.jpeg)

元記事を表示

88 解答

# Aceptedされたがダメそうな解答
問題文にソートされた配列はnums1に入れとかなくてはいけないと書いていたので、わざわざソートした combinedArray をnums1 にもういちど入れなおしている。
しかし、そもそもソートされた配列を関数で返してはいけないと書いてあるので間違いだと思う。
“`Java
public void merge(int[] nums1, int m, int[] nums2, int n) {
int[] combinedArray = new int[m + n];
int index = 0;
for (int i = 0; i < m; i++) { combinedArray[i] = nums1[i]; index++; } for (int i = 0; i < n; i++) { combinedArray[index] = nums2[i]; index++; } Arrays.sort(combinedArray); for(int i = 0; i <

元記事を表示

4分チャレンジ:31時(翌7時)基準のファイル分割ツール

# はじめに

前記事
1. [4分チャレンジ:タブ区切りファイルをhtmlファイルに変換する](https://qiita.com/hiuchida/items/8be2894b4f38397ba7c0)

毎日手作業で実施しているような小さなタスクをツール化する。
要件の洗い出しと、実装は分ける。

# 要件

通常、ログファイル等の分割は、日付単位でyyyymmdd等のファイル名に保存する。
ログファイルも当然溜まっていくが、チャートデータChartData.csvは1日単位で必要で、翌日には4本値をダウンロードすれば良いので、Tick単位のファイル(約1MB)はアーカイブしたい。
ただし、ザラ場が8:45-15:15、16:30-30:00のため、23:59:59で分割する意味がなく、翌日の06:00:01が最後のデータの後を基準にする。

過去のログファイルを確認すると、06:06ごろに注文stateが1に変更、06:17にAPI強制ログアウト、再ログイン後に終了した注文が削除、07:51ごろにcurPrice=0、08:00以降から注文stateが3に変更される。

以上を

元記事を表示

SpringBootでHerokuからアドオン使わずにGmail送信する

# Heroku に公開してるサービスにメール送信機能を実装したい。
## 前回、ローカルで動作確認に成功済
とりま、ローカルで実装しよう。。。
ということで、 Spring Mail と、 FakeSMTP を使って前回ローカル環境で動作させることができました。
↓前回の記事

https://qiita.com/tamuten310/items/07ab89ac1f2a5f0758e2

## Heroku で動作させたいけど…どうすれば…?
で、もともと Heroku に公開してるサービスなので、 Heroku でどのように動作させよう??

「Heroku gmail送信」とかで調べると、 SendGrid とか、アドオン使った実装の情報ばかり。。。
一応やってみたけど、アドオンが一瞬で凍結されたり、セキュリティが厳しそう。。。
それに、 SendGrid の API を使うために、専用のメール送信の書き方をしなければならない。

う~ん、前回 JavaMail で書いたソースをそのまま使いたいんだよね。。。

## ローカルで Gmail 送信
application.pro

元記事を表示

【Java】PokeAPIで遊んでみた(Pokemon.java編)

ネットサーフィンをしていたら面白そうなAPIを見つけたので遊んでみました。

↓↓↓↓**pokeAPI**↓↓↓↓
https://github.com/oscar0812/pokeapi-v2-java

このAPIの**Pokemonクラス**を重点的に調べてみました。
使用するにはpom.xmlに下記の追加に加え、Java15以上でないと使用することが出来ません。
“`pom.xml

com.github.oscar0812
pokeapi
1.0.0

“`

# 使い方
Clientクラスの **getPokemonById()** 又は **getPokemonByName()** を使用することでポケモンの情報を取得することが出来ます。

“`Sample.java
// ピカチュウの全国図鑑No.で取得
Pokemon pikachu = Cl

元記事を表示

PLATEAUのCityGML LOD2 を MVTに変換するツールを作ってみた

# 1. 概要
[ベクトルタイルAdvent Calendar 2021](https://qiita.com/advent-calendar/2021/vt)の@frogcatさんの記事『[PLATEAUのCityGML Building LOD2をMVTにしてみた](https://qiita.com/frogcat/items/84b413c7e08c00b78c6a)』は、[PLATEAU](https://www.mlit.go.jp/plateau/)のLOD2モデルを[mapbox-gl.js](https://docs.mapbox.com/jp/mapbox-gl-js/overview/)/[maplibre-gl-js](https://github.com/maplibre/maplibre-gl-js)の「[fill-extrusion](https://docs.mapbox.com/mapbox-gl-js/style-spec/layers/#fill-extrusion)」で描画するというものです。このLOD2-MVTは[3DTiles](https:

元記事を表示

ABC001が一通り解けたので書いた記事

## はじめに
初めてABCが開催されたときの問題ということもあり、メモリ制限が若干厳しめです。あと、今の感覚でDifficulty見るとそんな高い?って感じるかもしれませんが、今のABCの難易度が上がっているだけです。正常な感覚です。

では、実際に私がACを取れたコードを見ながら解説していきます。

## A-積雪深差
問題文は[こちら](https://atcoder.jp/contests/abc001/tasks/abc001_1)

単純にH1-H2を行なえば良いですね。
“`A.java
import java.util.*;
class Main{
public static void main(String[] args){
Scanner sc = new Scanner(System.in);
int H1 = sc.nextInt();
int H2 = sc.nextInt();
System.out.println(H1-H2);
}
}
“`
今のABCもこれくらい優しいと助かるんですがね。

## B-視程の通

元記事を表示

[Apache Hop] ETLで大量のDummyデータを生成してみた

# 紹介したいこと
– ETLを使ってDummyの大量データをを生成する方法を紹介します。
– ダミーデータを生成する**Generate random value, Fake data**部品を紹介したい。
– HopでのETLの定義の雰囲気を伝えたい for Beginner

# 対象者
– Apache Hop (データ統合プラットフォーム) 、ETLを試してみたい方。
– 大量のDummyデータを準備したい人
– そのデータをデータソースに格納したい人(ファイル、RDB、MongDBなど)

# 前提環境
– Docker Desktopをインストールしている
– Apache Hopを準備している
– Hop GUIを操作できる

https://qiita.com/Tadataka_Takahashi/items/f13161b981a8699f46ff

https://qiita.com/Tadataka_Takahashi/items/58f69ceb466a5c3a295a

https://qiita.com/Tadataka_Takahashi/items/

元記事を表示

antlr4のC++パーサーの実用性を検証してみた

# 概要
この記事は、ANTLRを応用してC++のパーサーを検討した際にわかったことをまとめたものです。誰かの役に立つことを期待して、記事を公開します。
結果は最後の方にあるので、お急ぎの方は最後の方だけ見てください。

# ANTLRはパーサージェネレータ
ソースコードなどの構造化されたテキストをデータとして処理するのに便利な、ANTLR(ANother Tool for Language Recognition)をご存知でしょうか。
構造化されたテキストデータを、構造を持ったものとしてコンピュータに理解させる処理は、パース(構文解析)と呼ばれます。
通常、テキストの構造はプログラミング言語毎に異なるので、構文解析はその言語の文法に特化する形で作る必要があります。
その構文解析の作成のハードルを少し下げてくれるのが、ANTLRです。
(だいぶ端折りますが)ANTLRは、EBNF記法に似た独自のプログラミング言語(ANTLR4向けの拡張子はg4)で構造を定義し、指定の実装(実行?)言語向けに構文解析を行うソースコードを生成することもあって、パーサージェネレータと呼ばれます。
なお、AN

元記事を表示

1 解答

# n^2の解法

“`Java
public int[] twoSum(int[] nums, int target) {
long targetLong = target;

int[] ans = new int[2];

for (int i = 0; i < nums.length-1; i++) { for (int j = i + 1; j < nums.length; j++) { if(nums[i] + nums[j] == targetLong) { ans[0] = i; ans[1] = j; } } } return ans; } ``` # nの解法 今回のように(同一配列の)二つの要素を組み合わせるにはHashMapがいいのかもしれない。 ```Java public int[] twoSum(int[] nums, int target) { Map hash = new HashMap<>();

for (int

元記事を表示

AppletをJSに変換してみる 後編

これは後編です。[前編](https://qiita.com/noty2008/items/c90820db35e2f7feabcb)をまだ読んでいない方は、まずそちらからお読み下さい。
# クラスメソッドの最適化
[前編](https://qiita.com/noty2008/items/c90820db35e2f7feabcb)の最後に、「アプリケーションのパフォーマンスを低下させる」と言いましたが、まずはその理由と対策をご紹介します。

## 原因
パフォーマンスを低下させる状況として、「同じクラスのインスタンスを大量に使用する場合」があります。例えば、次のようなJavaScriptのコードを考えてみましょう。
“`
function Hoge()
{
this.a = 0; this.b = 0;
this.setAandB = function(a, b) //・・・(*)
{
this.a = a;
this.b = b;
}
this.sum = function() //・・・(*)

元記事を表示

WIP: Oracle JDK は Java 17 以降も本番環境では有償の可能性あり

:::note alert
**この記事は、誤った内容を含む可能性があります。**
2022/05/14 時点での作者個人の見解に基づいて記載されており、作者の所属組織の見解や、作者が Oracle 社に直接確認した情報を表すものではありません。

この記事は、確定的な情報を提供することはできませんが、そもそも懸念があることにすら気付けていない人への注意喚起になればと思って公開します。願わくば、今後誤解が起きづらい状態に何かしらのアップデートがあることを期待します。
:::

Java 17 のリリースとともにアナウンスされた Oracle JDK の [NFTC (Oracle No-Fee Terms and Conditions) ライセンス](https://www.oracle.com/downloads/licenses/no-fee-license.html) により、乱立する JDK ディストリビューション問題に決着をつけ、今後は Oracle JDK でいけると思った人も多いのではないでしょうか。

Webでもこのライセンス変更が大きく取り上げられたことは、記憶に新

元記事を表示

Javaのvar変数のうまい使い方

Java8のエンジニアだった筆者がJava11の案件に参画し、varの変数のうまいなーと思う使い方があったので紹介したい。

# Javaのvar変数の特徴
Javaでvar変数はJava8では使えなかったが、Java11では使えるようになった。ただし、Javaのvar変数の使用に関しては以下のような制約を含んでいる。

* 左辺でvar変数の宣言をした場合、右辺でどの型の指定をしなくてはいけない。
* var変数としては処理しておらず(JavScriptのように)、結局右側で提示した変数の処理として処理される。

上記2つの制約を守れば、Javaでvar変数を使用することはできるわけではある。
しかし、特段変数宣言を左右で行う従来の宣言と何が違うのか分からなかったのが、従来の思想であった。

# こんな使い方

感心させられた使い方はこんな使い方である。
ただし、実際に書いてあるソースコードとは違うもので、大体同じような構成になっていたと考えてよい。

“`
import java.util.*;

public class Main {
public static voi

元記事を表示

AtCoderで茶色になったから書いた記事

## はじめに
入茶記事を書いている人を見かけて自分も書いた方が良いかなと思って書きました。
茶色になったのは一ヶ月半程前なので、曖昧なところもありますが、それなりに思い出しながら書きます。誰かが「あぁ、こんなやつでも茶色になれるんだな」と思って競プロを始めるきっかけになったらいいなぁと思ってます。

## 入茶したとき
入茶したのはABC245 (2022/3/26)のときでした(401というギリギリのレートでした)。
![スクリーンショット 2022-05-13 182557.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2664889/2d4e4fbc-0dde-7706-4ff4-076a26e161b9.jpeg)
それまでコンテストには計6回参加していたので、まぁ自分の実力を考えれば良い方なんじゃないかなと感じています。自惚れかもしれませんが。
ちなみに、画像からもわかる通り、次のコンテストで灰色に戻りました。
(10回目のコンテストでまた茶色に戻ったからヨシ!)

## 一応の自己紹介

元記事を表示

【Android】Variable is accessed from within inner class, needs to be final or effectively final

 自作の Android アプリで、画面上のボタンを押したら〇〇変数をOFFにする、というコードを作っていたら Variable 〇〇 is accessed from within inner class, needs to be final or effectively final というエラーが出た。
ONにしたい変数をグローバルにする、という簡単な対策でしたが、Android Studio で確認しました。

# 参考

[Variable is accessed from within inner class, needs to be final or effectively final – stack overflow](https://stackoverflow.com/questions/14425826/variable-is-accessed-within-inner-class-needs-to-be-declared-final#:~:text=You%20can%20declare%20the%20variable,inner%20class%20must%2

元記事を表示

SpringBootアプリケーションをCodePipelineを用いてBeanstalkに自動デプロイ

## 概要

[SpringBootアプリケーションをCodePipelineを用いてEC2インスタンスに自動デプロイ](https://qiita.com/tatsuakimitani/items/86258d80326ddc8091d9)
があったので、
[CodePipelineでSpringBoot on BeanstalkのCD/CIパイプラインを構築する](
https://springhack.com/codebuild-codedeploy-codepiplne%e3%81%a7springboot%e3%81%aecd-ci%e3%83%91%e3%82%a4%e3%83%97%e3%83%a9%e3%82%a4%e3%83%b3%e3%82%92%e6%a7%8b%e7%af%89%e3%81%99%e3%82%8b/)に倣ってBeanstalkに自動デプロイしました。

## 手順1 Githubにソースをコミットしておく
[spring initializr](https://start.spring.io/)でspringbootプロジェクトを作成し、

元記事を表示

「Javaの基本のk」を書籍と動画で学び直して、改めて理解が深まったことをまとめる

## 参考書籍

本記事では、主な参考書籍1冊を先に記述する。
– 中川清喬/国元大悟.**『スッキリわかるJava入門 第2版』**

:::note
この記事はJavaの初学者が、本人が忘れがちな語彙や文法事項を、学習内容定着とさらなる理解を深めるためにまとめたものです。
なにか新しい情報を提示する論文的記事ではないので、ご容赦ください。
:::

## 文法

– **代入時の自動変換**
– 「大は小を兼ねる」的な代入ができる。  e.g.)short型の値をlong型の変数に代入。
– 例外として、intをbyteやshortに入るもんなら入れることもできる。
– **キャスト変換**
– 大は小を兼ねないのに、無理矢理ぶち込むための手法。
– `int a = (int) 3.5;`のように表記すると、入らない部分は切り取って無理矢理代入できる。
– が、できないこともあるし不具合の原因にもなるし、よっぽどじゃない限り使わないのが◎
– **演算時の自動変換**
– 演算子の左右のオペランドの型も、基本揃えないといけない。

元記事を表示

リフレクションの基本の使い方について

servletをjunitでテストするにあたってprotectedにアクセスする必要が出た。
調べたらリフレクションを使えばアクセスができるっぽい。
備忘録として記載。

# 【目標】 Q.リフレクションとは??

:参考記事達:
・リフレクションについて
https://qiita.com/suke_masa/items/0df3bb92bcb69f4a95d1
↑個人的にすごくわかりやすかった。

・ジェネリクスの\について
https://qiita.com/pebblip/items/1206f866980f2ff91e77
↑たまにでてくる\について

・junitでリフレクションのやり方
https://qiita.com/11295/items/b632850389831041b987
https://www.sejuku.net/blog/33252#:~:text=%E3%81%97%E3%81%A6%E3%81%84%E3%81%BE%E3%81%99%E3%80%82-,private%E3%83%95%E3%82%A3%E3%83%BC%E3%83%

元記事を表示

Dockerでサクッと試すローコード開発 -「iPLAss」

本記事では、Dockerで「iPLAss」をインストールし、簡単に機能を試すまでの手順をまとめます。
近年開発手法として注目される「ノーコード開発」や「ローコード開発」ですが、iPLAssが提供するローコード開発の形をDockerでサクッと体験してみてください!

# iPLAssとは

「iPLAss」は、オープンソースのローコード開発プラットフォームです(OSS版のライセンスは、`AGPL v3`になります)。

以下のような特徴を持ちます。

– **ノーコード開発**
GUI操作によるノンプログラミングでのデータ定義やその他の各種定義(認証ポリシーや画面表示に関する設定など)を行うことでアプリケーションの構築が可能です。また、データ定義を行うことで自動的に当該データのCRUD(登録/参照/更新/削除)機能を持った汎用管理画面を構成します。
▼ `Admin Console` という管理者向けのWebコンソールで各種定義が行えます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.co

元記事を表示

【Servlet・JDBC】executeUpdata()とexecuteUpdata(String sql)の違いについて <忘備録>

DB操作の時に使用するexecuteUpdate()とexecuteUpdate(String sql)の違いについての忘備録

調べたことや実行したものをまとめたものなので、間違ってる部分があるかもです。

## 実行環境
・Eclipse 4.23.0
・Java 17
・Apache Tomcat 9.0
・Servlet 4.0

## executeUpdateとは
一言で表すと『SQLを実行するやつ』

もう少し細かく説明すると、
・SQL文を実行する
・[INSERT, DELETE, UPDATE]のSQL文を実行可能
・更新行数が戻り値として返される

こんな感じになる。
二つ目については、MERGEも実行できるらしい。
自分はMERGE文を使ったことが無いため、実際に実行できるかどうかは不明。

## executeUpdate()とexecuteUpdate(String sql)の違い
では、引数の有無の違いでどのような違いがあるのか。

パッと見、引数の有無の違いしか分からないが、調べてみると異なる点がまぁまぁあるらしい。
簡単にまとめると、
* execut

元記事を表示

OTHERカテゴリの最新記事