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

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

Stream#max()

max,minは、Comparatorを渡す
“`java
public class Outer {
public static void main(String[] args) {
List l = List.of(“C”,”X”,”A”);
l.stream().max((a,b) -> a.compareTo(b)).ifPresent(System.out::println);
l.stream().min((a,b) -> a.compareTo(b)).ifPresent(System.out::println);
}
}
“`
“`
X
A
“`

元記事を表示

String#compareTo()

sortに渡すComparatorのbaseになる考え方
returnが1以上になるとsortはひっくり返す

“`java
public class Outer {
public static void main(String[] args) {
String s1 = new String(“A”);
String s2 = new String(“B”);
System.out.println(s1.compareTo(s2));
System.out.println(s1.compareTo(s1));
System.out.println(s2.compareTo(s1));
}
}
“`
“`
-1
0
1
“`

元記事を表示

findAny findFirst method with parallelStream

findFirstは1個目の要素が保証される
findAnyは1個目の要素が保証されない
“`java
public class Outer {
public static void main(String[] args) {
List l = List.of(1,2,3,4,5);
l.parallelStream().findAny().ifPresent(System.out::println);
l.parallelStream().findFirst().ifPresent(System.out::println);
}
}
“`
“`
3
1
“`

元記事を表示

stream map method

Function interfaceを渡す
return type is Stream\
“`java
public class Outer {
public static void main(String[] args) {
List l = List.of(1,2,3,4,5);
l.stream().map(a -> String.valueOf(a) + “xxx”).forEach(System.out::println);
}
}
“`
“`
1xxx
2xxx
3xxx
4xxx
5xxx
“`

元記事を表示

stream reduce method

reduce methodは、BinalyOperatorを引き渡し累積的に処理する
return type はOperator<T>
初期値を渡すと、初期値の型を返す

“`java
public class Outer {
public static void main(String[] args) {
List l = List.of(1,2,3,4,5);
l.stream().reduce((a,b) -> {
System.out.print(“a:” + a);
System.out.println(” b:” + b);
return a+b;
}).ifPresent(System.out::println);
int sum = l.stream().reduce(100,(a,b) -> {
System.out.print(“a:” + a);
Syst

元記事を表示

AndroidTVでインジケーターを実装

# はじめに
初めましての方ははじめまして。

最近仕事でAndroidTVアプリの開発をすることが増えてきたので備忘録です。
AndroidTV(またはFireTV)はAndroidと違ってリモコンを用いて操作するので特有のUIになります。
トレイアートを横に並べるデザインが主流ですのでインジケーター等で視認性を上げる必要があります。

# 実装方法
いくつかあり、RecyclerViewで並べたりfor文で並べたり[jetpack Compose](https://developer.android.com/jetpack/androidx/releases/tv?hl=ja)を用いたりと実装方法自体はAndroidと変わりません。

今回はわかりやすさも兼ねてfor文で紹介します。

# 実装

レイアウトファイルにインジケーターの挿入位置を決めます。
“`xml
【AndroidStudio】ToolBarを使うときに気を付けること(戒め)

アプリを開発してできた!と思いリリースするとライトモードのスマホでは起動するのに、ダークモードのスマホでは落ちる。
これはToolBarを使うときにThemeをNoActionBarに変更しないといけないが、ダークモードのthemeを変更することを忘れていた自分への戒め。

## themeの設定
アプリにはもともとActionBarがあり、ToolBarとほぼ同じような働きをするものがついている。
そのためToolBarを使うときは、下の画像のようにthemesをダブルクリックしてtheme.xmlを開いてstyleのparentをActionBarを使わないものに変更、もしくはitemでActionBarを使わないことを記述する必要がある。
![themeLight.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2671458/b9cd532e-f228-de04-daf5-3afd4e6d4c4b.png)
“`xml:parentを変更する場合
WindowsにJDKをインストールする方法

# WindowsにJDKをインストールする方法

ダウンロードサイトが古いバージョンの記事が多いため、投稿します。

## 対象

– 動作環境が以下であること
– Windows 10 Pro
– 64bit
– [Windows10が32bit・64bitかを確認する方法](https://miya-system-works.com/blog/detail/119)

## JDKのダウンロード

1. Oracleのダウンロードサイト [Java Downloads(Oracle)](http://www.oracle.com/technetwork/java/javase/downloads/index.html) に遷移する
![1.PNG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/547575/736b3574-618c-cc72-7ce2-78b268a8696c.png)
1. スクロールし、Windowsタブを選択する
![2.PNG](h

VSCodeでSpring Bootをデプロイするまでに詰まった話【失敗談】

# 概要
タイトルの通りです。
VSCodeでSpring Bootのモジュールをデプロイするまでに詰まった結果の解決方法のメモになります。
基本的に頭弱い人が環境構築した失敗談なので、茶のおともにでもお読みください。

## 対象読者
効率的な情報共有を目的とした文ではないので、なんか暇つぶしに読み物をしたい人。

## 筆者のスキル
* Spring Boot
* ずいぶん昔にHello Worldくらいは表示させたような、しなかったような
* Spring Boot2.x系とSpring Boot3.x系の違いは分かってない
* IDEの使用歴
* JavaのIDEは今までEclipse
* VSCodeはjavascriptを使用するときに使ってる
* その他
* ぶっちゃけ、新規でアプリ作るのってあんまりやってない
* 英語から逃げ出したい

# 本記事の環境
* OS
* Windows 11
* 使用IDE
* VSCode(Visual Studio Code)
* 拡張機能(主要なもののみ)
*

元記事を表示

SpringBootでストップウォッチアプリを作ってみる

# はじめに
SpringBootで簡単なアプリ作成としてストップウォッチアプリを作ってみます。
自分の手で自分の作りたいものを手を動かしながらしたほうが、
習得早いのかなって思い始めました。
(ずっとインプットばかりだと、細かいところばっかり気になるし、
 インプットしたらしたで結局どう作るの?って感じなので…)

イメージとしては、スタートボタンとストップボタン、その時間何するか入力欄を
おいて、自分用の記録を取っていく感じです。
少しずつこの記事も更新していきます。(目標:2/3完成)

# 画面イメージ

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3118881/4b6a0438-6b65-cc3c-978d-43086dabadfc.png)

元記事を表示

【Java】Spring Bootで作るRESTAPIサンプル

実務でREST APIのソースを読む機会があり、自分でも簡単なものを作成してみたので備忘録として残しておく。

# 作成するアプリの概要

リクエストを投げるクライアント側とレスポンスを返すホスト側の2つを用意する。

クライアント側がブラウザで入力した文字列をホスト側にリクエストを投げる。

受け取った文字列をホスト側でコンソールに出力するというシンプルすぎるもの。

コンソールへの出力が成功した場合は「0」を、失敗した場合は「1」の処理結果コードをクライアントに返却する。

クライアントもホストのどちらもSpring Bootで実装し、どちらもローカルに存在しているものとする。

使用ライブラリはJackson、lombook。テンプレートエンジンはthymeleafを使用している。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/935552/da49798b-b03b-7d55-98b4-fe13b716e7a3.png)

# クライアントの実装

プロジェクト

元記事を表示

Intellij IDEA をアップデート(2021.1 → 2022.3)したら起動しなくなった

## 起きたこと
Intellij IDEA CE 2021.1 → 2022.3にアップデートしたところ起動できなくなりました。
アイコンをタップしてもピコピコ上下に少し動くだけで全く起動しない・・・。

## とりあえずログを見てみる
以下パスまで移動
“`
cd /Applications/IntelliJ\ IDEA.app/Contents/MacOS
“`
idea バイナリーを実行
“`
./idea
“`

するとこのようなログが
“`
IntelliJ IDEA CE.app/Contents/MacOS
❯ ./idea
2023-01-26 21:43:55.570 idea[2219:29511] allVms required 1.8*,1.8+
2023-01-26 21:43:55.573 idea[2219:29515] Current Directory: /Applications/IntelliJ IDEA CE.app/Contents/MacOS
2023-01-26 21:43:55.573 idea[2219:29515] par

元記事を表示

BitbucketPipelinesでCI/CDに挑戦する その1:手動でテストを起動する

## 概要
既にある程度の開発が進んでいるBitbucket上のプロジェクトにPipelinesを使って継続的あれこれする機能を追加しようという、解説というよりも私の挑戦の記録です。

PipelinesはDockerのコンテナを利用して作業を行いますので、Dockerの知識があると理解が少し楽になります。
**主題は[bitbucket-pipelines.yml](https://support.atlassian.com/ja/bitbucket-cloud/docs/configure-bitbucket-pipelinesyml/)の記述方法**となりますので、ファイル内で使用している変数などはご自分の環境に置き換えてお読みください。

その1では既存のリポジトリにPipelinesを導入して手動でテストを起動させるまでを扱います。後続のシリーズの記事で、実行可能Jarを配布するところまで持っていきたいと思います。

## 記事内で使用している開発環境
– Bitbucket上にリポジトリを持つJava17のプロジェクト
– ビルドにGradle7.6を使用したJavaライ

元記事を表示

Stream#distinct

distinct method 重複削除される
hashcode, equalsで判断されるためcustom classの場合は
overrideする
下記のサンプルはValue#equals()が常にtrueのために
同一値と判断され、すべて重複みなされる
“`java
class Value {

String str;
public Value(String str) {
this.str = str;
}

@Override
public int hashCode() {
return 1;
}

@Override
public boolean equals(Object obj) {
return true;
}

}
public class Outer {
public static void main(String[] args) {
List l = Arrays.asList(

元記事を表示

hashCode, equals method

equals methodは same valueを判定
multi field classは、自分でequals methodをoverrideする。
また、hashcodeは、
equals method is trueの場合、same hashcodeというルールがあるため
equals method override のタイミングで hashcode() method overrideする

下記はnetbeansでgenerateしたequals, hashcode。

“`java
class Value {

String str;
int i;

public Value(String str, int i) {
this.str = str;
this.i = i;
}

@Override
public int hashCode() {
int hash = 7;
hash = 83 * hash + Objects.hashCode(this.str)

元記事を表示

stream forEach sorted method

ListやArrayの各要素を委譲処理する仕組み
Stream interfaceに用意されたmethodを使用して処理する
Collection#stream()でfactoryする。
sorted, filter is intermidiate operation
forEach is terminal operation
primitive type は、IntStream, LongStream etc を使用

“`java
public class Outer {
public static void main(String[] args) {
List l = List.of(4,2,3);
Stream s = l.stream();
s.sorted().forEach(x -> System.out.println(x));
s = l.stream();
s.filter(x -> x % 2 == 0).forEach(x -> S

元記事を表示

javaのメソッド

# メソッドとは
+ コードを分割&整理、共通で利用できる機能
+ 使用する場面:大規模なプログラムを開発する時
+ コード名付けることが可能
+ 何度でもコードを呼び出し可能
+ コードは組み合わせ可能
+ public static voidでメソッドを作ることが可能。
これをmainメソッド内で呼び出し可能。
 `public static void メソッド名(){処理内容}`

## 使用例
“`java
import java.util.*;
public class Main{
public static void main(String[] args){
int a=(int)(Math.random()*10+1);
System.out.println(“リンゴを”+a+”個買った”);
//メソッドはMath.random()とSystem.out.println()
}
}
“`

System.out.println(引数)
メソッド内で処理した結果は戻り値として変数aに使える。

元記事を表示

[エラー]SpringBoot Repository UPDATE文の単体テストが成功しない 原因@Modifyingの引数が不足していため。

# 症状
RepositoryにおけるUPDATE処理の単体テストでエラーが出たので症状と対処法を投稿します。

## プロダクトコード
“`CustomerRepository.java
@Repository
public interface CustomerRepository extends CrudRepository {

@Modifying
@Query(“UPDATE Customer c SET c.enabled= true WHERE c.id = ?1”)
public void enabled(Integer id);
}

“`

“`Customer.java
@Entity
@Table(name = “customers”)
@Data
public class Customer {

@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = “id”, nullable = f

元記事を表示

Luceneの転置インデックスの仕組み part1

## 概要

Luceneのインデックスの構成などを理解を深めるためにLuceneのコードを読んだのでそのメモ

## アジェンダ

– インデックス作成されるまで
– Luceneの転置インデックスとは ←次回
– タームリストとポスティングリストの実現方法(コード) ←次回

## インデックス作成までの順番として
### インメモリバッファ
ドキュメントデータセグメント単位でインメモリバッファに保持

### マージ
設定されたポリシーに沿ってセグメント同士を結合する

### フラッシュ
フラッシュによってインメモリバッファのデータをdiskにセグメントとして永続化する
セグメントファイルとして永続化されるが、次のコミットされるまでは検索では使えない

### コミット
これによって強制的にデータがフラッシュされる
これによってdiskに永続化されたセグメントファイルが検索可能になる
だたdisk同期が発生するのでコストがかかる処理になっている

![image.png](https://qiita-image-store.s3.ap-northeast-

元記事を表示

Java ~配列~

・配列とは

 配列とは、値をまとめて管理するオブジェクトのこと。

 配列の種類は`データ型[]`、`ArrayList`、`LinkedList`、`HashMap`の4種類ある。

・データ型[]

・多次元配列の作り方

  多次元配列とは、配列の中に配列を作ることである。

  `データ型[][] 配列名 = new データ型[要素数][]`で作成することができる。

  `配列名[0] = new データ型[要素数]`で2次元目の配列の個数を入れられる。

![多次元配列図.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2850098/69c86168-f67a-51e2-9c39-66ce5d94544e.png)

・メソッド

・fillメソッド

  `Arrays.fill(配列名, 入れたい要素)` これを使うとすべての要素を“入れたい要素”にできる。すでにある要素も上書きされる。

・配

元記事を表示

OTHERカテゴリの最新記事