Java

【修正】オブジェクト間フィールドのコピー

先日の オブジェクト間フィールドのコピー - Oboe吹きプログラマの黙示録 を修正することにした。 それは、継承クラスにおいて継承元のフィールドをコピーすることを考慮すべきだからだ。 @Data @EqualsAndHashCode(callSuper=true) を書いているときのエン…

オブジェクト間フィールドのコピー

任意のオブジェクト間で、特定のフィールドだけをコピーするのに汎用的な方法を考えます。 これを考えるきっかけは、JUnit の assertEquals などを実行する前に、比較したくない属性フィールドは、 コピーして同じ値にしてしまおうという目的で、それを状況…

java.nio.file.Files の createDirectories

Files.createDirectory(Path path) は、path 生成元に存在しないディレクトリがあれば、 java.nio.file.FileAlreadyExistsException を発生するが、createDirectories なら、ディレクトリ作成できる権限、環境なら途中も生成 で作ってくれる。 try{ Path pat…

Java SHA256 の結果をどういう文字列にすべきか

Java SHA256 java.security.MessageDigest を使う場合結果として取得できる byte[] を、どういうHEX文字列にすべきか?String.format を使う手段もあるが、BigInteger の toString で16進を指定する手もある、 try{ byte[] hashbytes = MessageDigest.getI…

AWS Lambda タイムアウトの捕捉

AWS Lambda のタイムアウトをJava で作成するLambda関数に捕捉させる要件。 こういう要件、なんで Python で作らないんだという声は置いといて。。。 タイムアウトする Lambda は、ログ出力は、awslogs で CloudWatch で閲覧が可能という前提 Lambda のタイ…

ReturnalConsumer の使いどころ

先日と同じことではあるが、、 Matcher の find() と group() (2) - Oboe吹きプログラマの黙示録ReturnalConsumer の使いどころとして、、 https://github.com/yipuran/yipuran-core/wiki#returnalconsumert String str = "aaa134_cd45_def"; String res =…

Matcher の find() と group() (2)

oboe2uran.hatenablog.comを書きましたが、Matcher だけにフォーカスすれば、 必ずマッチが約束されているなら、 Git-Hub にUPした https://github.com/yipuran/yipuran-core/wiki#returnalconsumert ReturnalConsumer を使って Pattern ptn = Pattern.compi…

Matcher の find() と group() (1)

java.util.regex.Matcher は、マッチをさせてから、一致部分を抽出というステップが 煩わしいと思っていた。例えばファイル名の一部が時刻文字列(yyyyMMddHHmmss)になっており、時刻まで求めるのに、 java.util.regex.Pattern 正規表現でマッチー>Matcher…

Maven package 実行のメモ

テストスキップしてパッケージ生成 mvn package -DskipTests=trueクリーンしてからパッケージ(よく使いそうな実行) mvn clean package -DskipTests=trueMaven プロジェクトーサブモジュール構成で、モジュールを指定する場合 書式は、、 mvn clean package…

JUnit static メソッドのmock

以前、書いていたが、、 JUnit4 でのモック - Oboe吹きプログラマの黙示録static メソッドのモック は、mockito-core だけでなく、mockito-inline も必要 <dependency> <groupId>org.mockito</groupId> <artifactId>mockito-core</artifactId> <version>4.4.0</version> <scope>test</scope> </dependency> <dependency> <groupId>org.mockito</groupId> <artifactId>mocki…</artifactid></dependency>

PushbackInputStream を使用する

以前、Excel 拡張子 (xls) (xlsx) 両方に対応した操作 Apache POI として、 oboe2uran.hatenablog.com を書いた。しかし、ファイルシステムによっては、Excel WorkBook の認識に、 Your InputStream was neither an OLE2 stream, nor an OOXML stream or you…

list chain execute

public static <T, R> R relayFunction(List<T> list, Function<T, R> first, BiFunction<T, R, R> func){ Iterator<T> it = list.iterator(); R r = it.hasNext() ? first.apply(it.next()) : null; while(it.hasNext()) { r = func.apply(it.next(), r); } return r; }</t></t,></t,></t></t,>

クォート文字で囲ってないJSONキー

JSONの仕様は、フィールド名:キー は、(") ダブルクォーテーションで囲むと されているが、RFC8259 にそんなこと書いてあるか? JavaScript 表記のことを考えると、キーをダブルクォーテーションで囲まないケースで 読込みエラーになるのは、不都合なのでは…

Iterator → Stream

稀に書くことがある Iterator から Stream への変換メモSpliterators.spliteratorUnknownSize で、イテレータを Spliterator を作って、 StreamSupport で Stream生成 Iterator<T> iterator =list.iterator(); サイズが解らない場合ケースが多いので、 Stream<T> s</t></t>…

リスト要素の前方を参照する処理(3)

oboe2uran.hatenablog.comこれを、先頭だけ Consumer にして、BiConsumer で if 文を書く必要をなくす。 public static <T> void eachPrevious(List<T> list, Consumer<T> first, BiConsumer<T, T> consumer){ ListIterator<T> it = list.listIterator(); first.accept(it.next</t></t,></t></t></t>…

リスト要素の前方を参照する処理(2)

前回の投稿、 oboe2uran.hatenablog.comさらに、BiConsumer の処理にしてみます。 public static <T> void eachPrevious(List<T> list, BiConsumer<T, T> consumer){ for(ListIterator<T> it = list.listIterator(); it.hasNext();) { T pre = null; if (it.hasPrevious()) </t></t,></t></t>…

リスト要素の前方を参照する処理(1)

特別に新しいことではない、Java標準で 1.6の時代からあることではあるが、 意外と正確に迅速に書けないロジック (課題)A, B. C,.... と文字列のリストが存在する。 これを、前の要素を参照しながら抽出処理する。ListIterator の hasPrevious() と previo…

Jackson Map デシリアライズ

JSON → Map import com.fasterxml.jackson.core.type.TypeReference; TypeReference を使って Map<String, Object> map = new ObjectMapper() .readValue(jsontxt, new TypeReference<LinkedHashMap<String, Object>>(){}); try(InputStream inst = new FileInputStream(Thread.currentThread().getContextC</linkedhashmap<string,></string,>…

AWS Lambda関数 Java イベントの認識

AWS Lambda関数 をJavaで構築する場合、イベントの認識はハンドラメソッドのガイドとして 次がある。 docs.aws.amazon.comいきなり Map<String, String> で受け取るハンドラメソッドの方法が書いてあります。 JSONなら、JSONとして受け取ったら直ぐに parse して処理したいも</string,>…

AWS EventBridge で、Javaで書いた Batch Job にパラメータを渡す。

AWS のナレッジを参考にするしかない。 https://aws.amazon.com/jp/premiumsupport/knowledge-center/batch-parameters-trigger-eventbridge/「準備:Job定義」 Javaで書いた Batch のイメージ作成済でAWS Job定義のジョブ設定を行う。 ”Ref”+”::"+{パラメ…

ローカルの置いた Jar をMavenでビルドの依存関係に追加する。

Maven セントラルリポジトリにない JAR 、あるいは外部サーバーのMavenリポジトリから取得できない JARをローカルPCに置いて、Maven でビルドの依存関係に追加する方法Maven の <build> <plugins> に、以下のように<plugin> を挿入すれば可能になる。例)poisample-0.0.1-SNAPSHOT.ja</plugin></plugins></build>…

AWS boto3 の Java版?!

AWS boto3 に触れたので、これと同じことをJava でやるには、、、 oboe2uran.hatenablog.comaws-java-sdk-batch aws.amazon.comよりも、、software.amazon.awssdk AWS SDK for Java 2.x の方が、インターフェースもそっくり。sdk.amazonaws.comDescribeJobsR…

guice で @PostConstruct

@PostConstruct , @PreDestroy などの JSR-250 Lifecycle annotation は、 これらを使ってちゃんと実装すべきなのだろうけど、 guice/extensions/jsr250 at master · mathieucarbou/guice · GitHub @PostConstruct だけ、簡単につかいたい。結構、古い断片の…

Spring での static DI

Google guice での static へのインジェクションは、割と簡単な方法であるのに対し、、、 static injection - Oboe吹きプログラマの黙示録 では、Springの場合は、、、 と調べると。。 www.baeldung.comcode injection - Spring: How to inject a value to s…

static injection

Google guice に static 宣言の Object にインジェクションする方法はあるのか? ⇒ ある。 Module の configure() メソッド実行の中で、requestStaticInjection(Class ) で対象クラスを指定すればよい。 @Override public void configure() { requestStaticI…

JUnit 実行順序、さらに範囲指定での実行

JUnit 実行順序を指定するだけだと、 JUnit テストケースの実行順序 - Oboe吹きプログラマの黙示録 この通りだが、さらにその実行順序を振った前提で順番の番号の範囲を指定して 実行するにはこれに、少し改良すれば良い@Order アノテーションは前回と同じ i…

JUnit テストケースの実行順序

JUnit4 を使っていて、テストケースの実行順序をメソッド名によるソート@FixMethodOrderも悪くはないのですが 任意に順番を指定する良い方法はないかと探していたら、やはり自作するしかないようで 自作でも良いから簡単な方法は?と探してたらありました。…

OpenJDK 11 で、javax.annotation.Resource がコンパイルエラー

@Resource を使用したコードを OpenJDK 11 でビルドしようとしたら、 見つからないとコンパイルエラーになった。 Java 8 Oracle SDK の時は標準SDKにあったけどどうやら、一旦、外されたらしい。 Java 11: cannot find symbol javax.annotation.Generated ·…

可変長引数のコンストラクタを持つクラスのリフレクション

可変長引数のコンストラクタを持つクラスをコンストラクタのリフレクションで生成する 以下のようなコンストラクタの時、 public Sample(String...args) { Constructor の newInstance メソッドは、newInstance(Object...) であるので、 以下のように、new O…

zip圧縮

Java 標準SDK で、ちょっと簡単に書いてみる。 import java.io.BufferedInputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.OutputStream; import java.util.Arrays; import java.util.zip.Zip…