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

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

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

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

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

元記事を表示

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

# Javaでヒュベニの公式(Hybeny’s Distance Formula)を使った実装

緯度経度間の直線距離は、地球が楕円型の所為でそれほど平面上の座標の距離ほど簡単に算出できない。
これを求めるためにはいろいろな方法があるようだが、ヒュベニの公式を使った例が比較的多く、
実装も簡単そうだったので実際にJavaで書いてみた。
(尚、精度についてはかなり距離があるとイマイチだった)

“`java
double distance(final double latitude1,
final double longitude1,
final double latitude2,
final double longitude2) {
// このあたりはstatic化できる
final double POLE_RADIUS = 6356752.314245; // 極半径(短半径)

元記事を表示

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

元記事を表示

Java Web Startテスト

前書き

ふっと、Java8で提供されるJava Web Startのサポートが2030年に切れるという話を聞きまして、
現状、Java11以降ではJWS自体廃止されてるということなので、
二点気になったことがありました:
1.有償プランを契約していない状態でJWSの機能を使用できるか?
2.Java11など後継バージョンで機能自体は引き継がれているのか?

今回は1のほうを検証してみようと思います。

参考記事

テスト環境

Win10、Java8(jdk1.8.0_321、jre1.8.0_321)

コーディング

SampleApplication.java

“`java
import java.awt.*;
import javax.swing.*;
import javax.swing.border.*;

public class SampleApplication extends JFrame {
private JPanel cont

元記事を表示

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ほど有名ではありませんが
最近人気になってきているようです。

これ

元記事を表示

【Java】Stream APIの使い方

## はじめに
先輩エンジニアの方から学んだ方がいいとアドバイスをもらいStream APIについてキャッチアップをしました。
なんだか難しく聞こえますが、使ってみると意外と簡単なので忘備録を兼ねまとめています。

## Stream APIとは?

Java8で導入された配列やCollectionなどを扱い、値の集計やデータを使った処理などができる便利なAPIのこと。

これだけではあまりイメージが湧かないので、**for文で記述していた処理をシンプルに記述できる便利機能**と覚えておけばOK!

## for文とStream APIの比較

今回は「**1から5までの整数の中から偶数を取得する処理**」をfor文とStream APIを利用して実装する。

“`java
import java.util.Arrays;
import java.util.List;

public class StreamTest {
public static void main(String[] args) {

// 1から5までの整数
List numLis

元記事を表示

Java系バージョン対応表

JRE仕様とクラス形式のバージョン対応表

| JRE | class |
|—-:|——:|
| 1.6 | 50.0 |
| 1.7 | 51.0 |
| 1.8 | 52.0 |
| 9 | 53.0 |
| 10 | 54.0 |
| 11 | 55.0 |
| 12 | 56.0 |
| 13 | 57.0 |
| 14 | 58.0 |
| 15 | 59.0 |
| 16 | 60.0 |
| 17 | 61.0 |

Apache TomcatとServletのバージョン対応表

| Tomcat | Servlet |
|——-:|——–:|
| 6.x | 2.5 |
| 7.x | 3.0 |
| 8.x | 3.1 |
| 9.x | 4.0 |
| 10.x | 5.0 |

元記事を表示

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

##はじめに
関数型インターフェースのFunctionインタフェースをご存知でしょうか。Functionインターフェースを使用すると処理をキュッとまとめることができます。これによって読みやすいコードにするこどができます。そんなFuncitionインターフェースとおまけにBiFunctionインターフェースについて解説していきます。

##Functionインターフェースとは
引数を1つ受け取ってその引数を使った処理返す関数型インターフェースです。例えば、引数の5を受け取ったとしましょう。その5に1を足す処理を返すというイメージです。Functionは抽象メソッドであるapplyメソッドを持っています。では、サンプルコードを通して具体的に説明していきます。

:::note info
Functionはジェネリックスの型を2つ受け取ります。
具体的には1つ目の型はappyメソッドの引数の型、2つ目はapplyメソッドの戻り値の型として受け取ります。
:::

##どうやって使うの?
以下のサンプルコードは引数に半径を受け取り、その引数を利用して円の面積を求める処理をしています。Funct

元記事を表示

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

#はじめに
関数型インターフェースの1つPredicatetインターフェースをご存知でしょうか。
predicateインターフェースとラムダ式を組み合わせれば、複雑な条件をシンプルに実装できてしまいます。そんなPredicateインターフェースとおまけにBiPredicateインターフェースを解説していきます。
##Predicatetとは?
Predicateを日本語に訳すと「断定する」という意味になります。言葉の通り、引数を通して何らかの判断をする処理を定義するためのものです。例えば、戻り値がboolean型の処理をラムダ式で変数に代入して簡単に呼び出せるようにできます。Predicateはtestメソッドを持っています。そのメソッドは引数を1つ受け取り、その引数を使って、その結果をboolean型で戻します。サンプルコードを通して使い方を説明していきます。

##どうやって使うの?
サンプルコードでは理想の男性を絞るためにMainクラスでif文を使って絞り込んでいきます。

“`Man.java
public class Man {
private int hight;
p

元記事を表示

Javaを使用してPDFのブックマークを展開または折りたたむ方法

PDFのブックマーク機能は、指定された読み取り位置をすばやく見つけることができます。 複数のブックマークに対しては、人々は自分の好みに応じてそれを展開してまたは折りたたむことができます。この記事では、Javaプログラムコードを使用してPDFブックマークを展開または折りたたむ方法を紹介します。

##プログラム環境:

Spire.Pdf.jar(無料バージョン3.9.0バージョン)
JDK1.8.0(バージョン1.6.0以降を使用可能)
IDEA

###JARファイルのインポート:
jarパッケージを手動で[ダウンロード](https://www.e-iceblue.com/Download/download-pdf-for-net-now.html)してインポートします。libフォルダーにあるSpire.Pdf.jarファイルをダウンロードして解凍し、Javaプログラムへの参照を追加します。
jarのインポートは以下の図に示すように:
![01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2787

元記事を表示

Java入門#2_演算子と条件分岐

#演算子
演算子とは、加減乗除をする文字のことです。
c#やPythonでは`+,-,*,/`などがありました。

***javaもC系統とほぼ同じ記号を使います***

忘れてしまっていたら以下のページで確認して見てください。

演算子

以下、上記はだいたい頭に入っているものとして進めます。

試しに、二つの数を入力してその数の和を出力するプログラムを書いて見ます。

“`java
import java.io.*;

class cal{
public static void main(String[] args)throws IOException{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));//お約束

//二つの数字を文字として入力
System.out.println(“a=?”);
String str1 = br.readLine();

元記事を表示

【 Java_評価の3つの原則 】

Javaを学習中の初学者による備忘録です。
Javaは`3つの単純な原則`に従いながら式の評価を完了します。

## 評価とは
Javaが式に従って計算処理をすること。
例えば、1+3=4という式では、『1+3を`評価`した結果が4になる』ということになります。

## 評価の3つの原則
■評価結果への置換の原則
オペランドの情報を使って計算を行い、それらオペランドを巻き込んで結果に化ける(置き換わる)
例 : 1+5=6では、1と5を足すと、6に置き換わる。

■優先順位の原則
式に演算子が複数ある場合は、優先順位の高い演算子から順に評価される。
例 : 1+5*6では、5*6を行い、後に30+1を行う

■結合規則の原則
式内に、同じ優先順位グループに属する演算子が複数ある場合、演算子ごとに決められた「方向」から順に評価される。
例 : 10+5+2では10+5から順に、a=b=10ではb=10から順に評価される。

##補足
・オペランド…1+3=xを例に取ると、『1 3 x』のこと。『+ =』は演算子。

元記事を表示

extendsはなぜ邪悪か – 具象基底クラスをインターフェイスに変えることでコードを改善する

## 翻訳にあたり

この記事はアレン・ホルブ(Allen Holub)[^1]さんの[Why extends is evil](https://www.infoworld.com/article/2073649/why-extends-is-evil.html)の翻訳です。古い記事ですが日本語訳が存在しないため翻訳いたしました。アレンさんにはTwitterメッセージ越しに快諾いただきました。

[^1]: 日本語圏における情報が少なかったため、[氏が講師を務めるアメリカO’reilly社の講座](http://shop.oreilly.com/product/0636920043942.do)で発音を確認したところ、「u」がほとんど発音されておらず(聴感上は「Holb」)、それに倣った。早口なせいか書き起こしが「Alan Holt(日本語字幕も当然アランホルト)」になっていたのはご愛敬。

Javaに総称型が導入される前の記事ですが、この記事の要点は現在でも通用する内容で、いい意味での古典だと思います。C#など、Java同様にインターフェイス(もしくはプロトコル、トレイト)を持つ言語

元記事を表示

Javaのインクリメント・デクリメントについてまとめてみた

Javaのインクリメントとデクリメントについて学習したのでまとめてみたいと思います。

# Javaのインクリメントとデクリメントの書き方とそれぞれについて

| |処理内容 |構文 |
|—|—|—|
|インクリメント |一つ加算される |変数++、もしくは、++変数 |
|デクリメント |一つ減産される |変数–、もしくは、–変数 |

インクリメントに関しては見たことがあると思います。

“`main.java
public class main {
public static void main (String[] args) {
for (int increment = 0; increment < 2; increment++){ System.out.println("increment=" + increment); } } } ``` このようにJavaでfor文を使ったことがある人であれば、変数++でインクリメントしているところを見たことがあると思います。 ただ、インクリメントもデクリメントに

元記事を表示

OTHERカテゴリの最新記事