yucatio@システムエンジニア

趣味で作ったものいろいろ

Optional.flatMap()は再帰的かどうか

疑問 Optional.flatMap()は再帰的かどうか(2段以上Optionalがネストされた場合に一番内側の値を取得するか) 結論 再帰的でない。 Optional.flatMap()とは Optionalのマップの結果がOptionalのとき、その中身を取り出してくれるメソッド Optional<String> o = Optiona</string>…

JavaのパラレルストリームでCollectors.toList()は順番に並ぶか

背景 Javaでパラレルストリームを使用すると、forEachでは順番がランダムになる。 List<String> list = List.of("A", "B", "C"); list.parallelStream().forEach(System.out::println); // B C A など Collectors.toList()で集約したリストは元の配列の順番に並びま</string>…

JavaのパラレルストリームでforEachは並列実行されるか

結論 javaのパラレルストリームでforEachは並列実行される コードを書いて確かめてみた forEach内でsleepして動作を確かめてみた List<String> list = List.of("A", "B", "C"); list.parallelStream() .forEach(s -> { System.out.println(s + ": start"); System.ou</string>…

Javaでリストの重複しているインデックスを取得する(ストリームAPI使用)

Javaで、リスト内で重複している要素の、インデックスをグルーピングして取得します。ストリームAPIを使用すると簡単に書けます。 List<String> list = List.of("A", "B", "C", "B", "B", "D", "A"); Map<String, List<Integer>> indexGroup = IntStream.range(0, list.size()) .boxed() .c</string,></string>…

Javaでリストの重複をカウントする(ストリームAPI使用)

Javaでリストの重複をカウントする方法です。ストリームAPIを使用すると簡単に書けます。 重複をカウントする List<String> list = List.of("A", "B", "C", "B", "B", "D", "A"); Map<String, Long> countMap = list.stream().collect( Collectors.groupingBy( Function.identity()</string,></string>…

Java歴13年がJava Gold(SE 11)を受けてみた

無事Java Silverの資格を取得したので(過去記事: Java歴13年がJava Silver (SE 11)を受けてみた【勉強編】 - yucatio@システムエンジニア を参照)、本命のJava Goldを受験しました。 受験のきっかけ TwitterでJava Silverを受験する人を見かけて興味を持った…

Java歴13年がJava Silver (SE 11)を受けてみた【総評】

試験を受けてみての感想です。 勉強編 yucatio.hatenablog.com 受験編 yucatio.hatenablog.com 試験を受けてよかった? 良かった。 当初の目標の1つであった、Java5より後に追加された機能について知ることができました。特に、関数型インターフェース(Consu…

Java歴13年がJava Silver (SE 11)を受けてみた【受験編】

勉強編はこちら yucatio.hatenablog.com 黒本の模試で正答率90%を超えたので、試験の申し込みを行いました。 受験チケットの購入 受験料の支払いは、受験チケットを購入するか、試験の申込時にクレジットカードで支払います。受験料は32,340円(税込み)です。…

Java歴13年がJava Silver (SE 11)を受けてみた【勉強編】

Java実務歴13年がJava Silverを受けてみたのでその記録です。 受験のきっかけ TwitterでJava Silverを受ける人を見かけたのが最初に受験を意識したきっかけです。 Webで問題を調べて解いてみたところ、解けそうで解けないことにますます興味がわきました。 …

pom.xml内のプロジェクトのバージョンをmvnコマンドを使って抜き出す

pom.xmlのバージョンを、コマンドを使って抜き出したかった時のメモ。 pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd"> </project>

【Java】スネークケース→キャメルケースに変換するプログラム

スネークケース(snake_case)からキャメルケース(camelCase)に変換するJavaのプログラムです。 public static String toCamelCase(String text) { if (text == null) { return null; } if ("".equals(text)) { return ""; } String[] words = text.split("_",…

【Java】キャメルケース→スネークケースに変換するプログラム

キャメルケース(camelCase)からスネークケース(snake_case)に変換するJavaのプログラムです。 public static String toSnakeCase(String text) { if (text == null) { return null; } if ("".equals(text)) { return ""; } StringBuilder sb = new StringBui…

JUnit実践入門を読んだ

職場でJUnitを使っています。JUnitについてなんとなく理解はしているものの、もう少し便利な機能がないかと思って本書を手に取りました。 JUnit実践入門 体系的に学ぶユニットテストの技法 (WEB+DB press plusシリーズ) [ 渡辺修司 ]価格:3630円(税込、…

会社では作りたいものを作れるわけではないのにプログラミング初学者には作りたいものがあってほしい、について

先日、表題のツイートをしまして、もっとこの件について語りたいため、記事にしました。 会社では、「作りたいものを」「作りたいように」作れるわけではない。でも、プログラミング初学者には作りたいものがあってほしいなという勝手な願いがある#駆け出し…

『Spring Framework超入門 ~やさしくわかるWebアプリ開発~』を読んだ

『Spring Framework超入門 ~やさしくわかるWebアプリ開発~』(著: 樹下雅章)を読みました。 Spring Framework超入門 ~やさしくわかるWebアプリ開発~ [ 株式会社フルネス 樹下雅章 ]価格:3058円(税込、送料無料) (2022/3/4時点)楽天で購入 感じたことを…

【Java】ネストした型のワイルドカードでエラーが出る場合の対処法

例えば、ListのListで、中身はなんでもよい、みたいな場合があるとする。コードであらわすとこんな感じ。 List<List<?>> wildcardList; これに、例えばIntegerのListのListを割り当てようとするとエラーになる。 List<List<?>> wildcardList = new ArrayList<List<Integer>>(); // コンパイ</list<integer></list<?></list<?>…

『Spring Framework 超入門』のレイアウト化の作成がうまく出てこないときの対処法

『Spring Framework超入門 ~やさしくわかるWebアプリ開発~』を読んでいます。 Spring Framework超入門 ~やさしくわかるWebアプリ開発~ [ 株式会社フルネス 樹下雅章 ]価格:3058円(税込、送料無料) (2022/2/9時点)楽天で購入 問題発生 6章の「レイアウ…

Draft.jsで何も出てこない→出てるはず

Facebook社のReact用リッチエディタDraft.js。 Overview | Draft.jsにあるサンプルを試したけれど、何も出てこなかったときのメモ。 ソースコード import React from 'react'; import {Editor, EditorState} from 'draft-js'; import 'draft-js/dist/Draft.c…

Javaで1日の始まりと終わりを取得する

Javaで1日の始まりと終わりを取得します。 LoalDateから取得する場合 LocalTime.MINとLocalTime.MAXを使います。 DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); LocalDate date = LocalDate.parse("2021-11-01", formatter); L…

JavaのLocalDateTime.parse()に日付だけ渡すとエラー

JavaのLocalDateTime.parse()で日付のみを指定したらエラーになりました。回避策も書いておきます。 コード DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd"); LocalDateTime datetime = LocalDateTime.parse("2021-11-01", format…

Firestoreのtransaction中にドキュメントをaddする

Firestoreではtransaction機能が使え、複数の書き込みをまとめることができます。 transactionを使用するときには、以下のコードのようにrunTransactionを利用します。2つ目の引数にトランザクションの内容を書いた関数を渡します。 await runTransaction(db…

Firestoreで文字列を正規表現で制限するセキュリティルール

Firestoreのセキュリティルールでは、文字列を正規表現で制限することができます。悪意のあるユーザにおかしな値を登録されないようアプリと同じ制限をかけておきましょう。 String.matches(regex) String.matchesを使うと、フィールドに登録される値が 指定…

Firestoreで数値の範囲を制限するセキュリティルール

Firestoreのセキュリティルールで数値の範囲を制限することができます。悪意のあるユーザにより思わぬ値を登録されてしまい、誤動作を起こすことを防げます。 フィールドの大小比較を使う 数値の範囲を指定するには、フィールドの値を大小比較します。 例え…

Firestoreで文字列の長さを制限するセキュリティルール

Firestoreのセキュリティルールで文字列の長さを制限することができます。悪意のあるユーザによりとても長い文字列が登録されてしまい、結果過大な請求が発生するのを防ぐためにも、文字列の長さを制限しておくのはおすすめです。 string.size() 文字列のstr…

FirestoreでEnum型風ルールを作成する

Firestoreではセキュリティルールでフィールドの型を指定できます。 フィールドの型にはboolやint、stringなどがあります。 しかしenum型は存在しません。 Firebaseのセキュリティルールでは、string型のフィールドに対して登録できる文字列を制限することが…

MUI(Material-UI)のアイコンにフチドリをつける

MUI(Material-UI)のアイコンにフチドリをつけます。 通常のCSSのスタイルと同様にstrokeとstrokeWidthを指定します。strokeOpacityやstrokeLinejoinなども指定できます。 コード <StarIcon sx={{color: yellow[500], stroke: yellow[900], strokeWidth: 4, strokeOpacity: 0.2}} /> 全ソースコード import React from 'react'; import Box from '@mui/material</staricon>…

PythonでSetのSetを作成する

PythonでSetのSetを作成しようとするとエラーになります。 my_set = set() my_set.add({1, 2, 3}) # => TypeError: unhashable type: 'set' Pythonでは、Setの各要素はハッシュ可能(hashable)でなければいけません。 Pythonの組み込み型でハッシュ可能なのは…

再帰を使わない順列生成 : 1から9の数字を1回ずつ使ってできる数を、小さい方から順に列挙する(アルゴリズム編)

1から9の数字を1回ずつ使ってできる数を、小さい方から順に列挙するアルゴリズムです。 次に小さい数を求めるアルゴリズム ある数Nが与えられたとき、その数に使用されている数字を使用してできる数で、Nの次に大きい数を生成します。 ① Nの10^iの桁を、n[i]…

Groovyのクロージャ ④Groovyで独自のDSLの作成

背景 JenkinsというCIツールではGroovyのコードでCI挙動を記述できるJenkins pipelineがあります。 ここではGroovyのDSL(Domain-Specific Language:ドメイン固有言語)が使われています。 DSLにはクロージャが効果的に使用されています。 今回は独自のDSLの作…

Groovyのクロージャ ③名前解決方法(resolveStrategy)の挙動

背景 JenkinsというCIツールではGroovyのコードでCI挙動を記述できるJenkins pipelineがあります。 Jenkins pipelineではGroovyのDSL(Domain-Specific Language:ドメイン固有言語)が使われています。 DSLにはクロージャが効果的に使用されています。 今回は…