Java

System.out を close したと騙して再利用する。

try-with-resources 文で、PrintWriter pw = new PrintWriter(System.out) を書いて、 try-with-resources文の finally を実行した後ろで、System.out.print を実行しても 既に close しているのだから、print / println は機能しない。でも、再度、System.o…

Generate a JSON schema using Jython !?

JSON schema の Draft 7 JSON Schema Draft-07 Release Notes | JSON Schema に沿ったバリデータを探していて、 JSON schema を生成するのに、Python でというのは、よくあるアーキテクトと思うが、、 今更、Jython ?。。。天下のOracle のページで目にした…

YAML 配列を読込む場合のルール

昨日書いた YAML に追加で、、、 https://oboe2uran.hatenablog.com/entry/2020/07/24/124904 以下のように、clist キーに配列がある場合、 address: group: info1: A info2: 120 clist: - 21 - 22 - 23 aaa: bbb: ABC この clist を読むための List を、@Va…

JUnit で、YAML を読む処理をテストする時、@EnableAutoConfiguration を忘れずに!

YAML を読む処理を JUnit テストする時、( Spring Batch での話 ) @ContextConfiguration で、イニシャライザ指定 initializers = ConfigFileApplicationContextInitializer.class を付けるだけでなく、 @EnableAutoConfiguration が必要 例) application…

mybatis + HikariCP

コネクションPOOL に HikariCP を使用した mybatis の接続 【再興】mybatis XML設定を使わない場合 - Oboe吹きプログラマの黙示録 のパターンで書いてみる。HikariCP 3.4.5 <dependency> <groupId>com.zaxxer</groupId> <artifactId>HikariCP</artifactId> <version>3.4.5</version> </dependency> mysql-connector-java 8.0.21 <dependency> <groupId>mysql</groupId> </dependency>

【再興】mybatis XML設定を使わない場合

過去に、 mybatis XML設定を使わない場合 - Oboe吹きプログラマの黙示録mybatis xml設定ファイル使わない場合の補足 - Oboe吹きプログラマの黙示録と書いたが、SQLMap の XML も書かないで、SQL文もアノテーションで済ませたい。mybatis 3.5.2 mysql-connect…

【再考】escape がある区切り文字による split

先日書いた、 oboe2uran.hatenablog.comこれでは、ダメだ エスケープする文字列が残らない。 だいたい java.util.StringTokenizer なんて古いものは、すでに奨励されていない。 char 型で処理する public static List<String> tokenToList(String str, char sep, cha</string>…

escape がある区切り文字による split

String の split(String regex) は、頻繁に良く使われるメジャーなメソッドである。 でも、区切り文字(デリミタ)に対してエスケープがあり、エスケープ文字を考慮して split でリストを求めたい。 サンプル文字列 「$.aaa.\.bb\.bbb.cc\.\.c.\.\ddd\..ee\\…

無限Stream を limit でなく別の方法で STOP させる。

limit を使わずに Stream 止め方には、トリッキーではあるが、 filter(Predicate) 、findAny() で止めるか、anyMatch(Predicate) で、止める方法がある。 Stream.iterate(1, i->i+1) .peek(System.out::println) .filter(n->n > 9) .findAny(); これの findA…

double の値が、整数か小数点有りか調べる

Java で案外、これを問われると簡単なようですぐに出てこない。 結果、boolean 値とする。 文字列にして小数点(.)文字を検証する方法 double d = 13.02; boolean flg = Long.parseLong(String.valueOf(d).substring(String.valueOf(d).indexOf('.')+1))==0…

Big JSON を読み込みを汎用化

先日の「Big JSON を読み込む JsonReader の実践」より汎用化を考えました。。 以下、抜粋のコードです。 public void execute(JsonReader reader, Consumer<T> consumer){ boolean request = false; try{ while((reader.hasNext() || reader.peek().equals(Jso</t>…

Big JSON を読み込む JsonReader の実践

先日書いた「Big JSON を読み込む JsonReader」、 より実践的なサンプルを書いてみる。 JSON素材 { "category": "JsonReader テスト", "filename": "sample.json", "itemlist":[ { "name": "A", "flag": true, "time": "2020/06/05 22:14:25" }, { "name": "…

置換表、正規表現マッチ replace

前持って置換文字列の表を用意しておいて、正規表現で見つけて置換する処理を無駄なく 処理できるものがあったら良いだろうと考えました。 import java.util.Iterator; import java.util.Map; import java.util.Optional; import java.util.Spliterator; imp…

Big JSON を読み込む JsonReader

大きなJSON を Google gson で読込むとき、メモリ不足にならないように、fromJson ではなく JSONのトークンで読みだす JsonReader を実行するのだが、注意しなければならない点がある。以下のように、JsonReader の hasNext() 問い合わせだけでは、END_ARRAY…

yipuran-core から CSV処理機能を他に分岐する

長い間、CSV読み書きする処理を、yipuran-core ライブラリで抱えこんでいたが、 yipuran-core に様々な処理が増えてきた。 CSV書込み処理を強化したい。 という理由で、yipuran-core のバージョン 4.19 ( Ver 4.19 ) より、CSV読み書きの処理を、yip…

配列のマップのキー自動チェック登録

リストのケースに触発されて、配列の場合、、、 import java.io.Serializable; import java.lang.reflect.Array; import java.util.Map; import java.util.Optional; import java.util.function.Function; import java.util.function.UnaryOperator; /** * M…

Setコレクションのマップキーチェック add

リストMap の リストに要素を追加(3) - Oboe吹きプログラマの黙示録リストMap の リストに要素を追加(4) - Oboe吹きプログラマの黙示録を書いたので、Set の方も、、、Set の場合は、TreeSet や、HashSet を指定できた方が良いので、未指定→HashSet と…

リストMap の リストに要素を追加(4)

oboe2uran.hatenablog.comもっと短く書けるけど、メリットないか。。。 import java.io.Serializable; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.Optional; import java.util.f…

Stream boolean を集計

Stream 処理して単に、boolean を集計したい時、 1つでも true が発生、または全てが true になるかを求める時など、 forEach で、AtomicBoolean をセットするのは直感的だが、賢くはない。map メソッドで、Boolean に変換して collect で集計するのがスマ…

リストMap の リストに要素を追加(3)

リストMap の リストに要素を追加する時、、 - Oboe吹きプログラマの黙示録リストMap の リストに要素を追加(2) - Oboe吹きプログラマの黙示録と書きましたが、、以下に落ち着きそうです。 import java.io.Serializable; import java.util.ArrayList; imp…

リストMap の リストに要素を追加(2)

昨日書いた、 oboe2uran.hatenablog.com の続きです。 昨日書いたもの。。。 public static <T> UnaryOperator<List<T>> listAddReturn(T t){ return l->{ l.add(t); return l; }; } Map<String, List<String>> map = new HashMap<>(); map.put("a", Optional.ofNullable(map.get("a")) .map(</string,></list<t></t>…

リストMap の リストに要素を追加する時、、

Map<String, List<String>> map; 結構、頻繁にこういう Key と、List のマップを用意して、Key の存在を確認して List を新しく生成して、put したり、マップから取得して add して 再びマップに put するのを記述するのは、いつもなんとかならないかと思ってました。そこで、以下</string,>…

カウンタ付きの Consumer

Stream ラムダ式の実行中のカウンタ - Oboe吹きプログラマの黙示録 の続き、、、 Throwable を捕捉できる Consumer 以下を継承するようにして、 yipuran-core/ThrowableConsumer.java at master · yipuran/yipuran-core · GitHub 3要素の Consumer 、トリプ…

Stream ラムダ式の実行中のカウンタ

Stream の forEach や、map 、filter 、様々なラムダ式実行の中で、カウンタが必要な時、 しかたなく、AtomicInteger や、グローバルスコープに置いたカウンタインクリメント参照を よく書いてました。 また、ネット検索してよく紹介されてる例は、実行処理…

List<Integer> → int[]

Object型からプリミティブ型でラッパーが必要になる宿命から、、 Integerリストから、int[] が欲しい時の為に、、、 public static int[] toIntArrays(Collection<Integer> values){ int[] iary = (int[])Array.newInstance(int.class, values.size()); int n = 0; fo</integer>…

配列のリストをソートする

先日の投稿、入れ子リスト、List<List<T>> をソートする - Oboe吹きプログラマの黙示録 と、 yipuran-core/NestedListComparator.java at master · yipuran/yipuran-core · GitHub に続いて配列のリストをソートする場合もついでなので書いてみる。。前回同様、配列</list<t>…

Repetition Permutation の生成数

要素の繰り返し有りの順列 Permutation が生成するリストは、Java では、長さ8以上ではメモリ不足になってしまう。 生成する順列を溜めなくても、7以上はかなり遅くなる。以下のとおり長さに対して結果の数はとても大きくなる。 data length List A,B,C 3 …

入れ子リスト、List<List<T>> をソートする

入れ子リストをソートしなければいけない要件は少ないとは思います。任意クラスが、Comparable を実装しているなら簡単ですがそうでなく、中の属性値でソートしなければならない時は 面倒です。例)Item は,属性 Integer price を Not NULL で持っており、こ…

総称型の配列を作るメソッド

配列数が動的な総称型の配列を作る必要がある時、、、n個の配列、全て null で初期化するなら、 @SuppressWarnings("unchecked") public static <T> T[] nullArrays(int n, Class<T> cls) { return (T[])Array.newInstance(cls, n); } ただし、int.class や、char</t></t>…

リストから、固定の長さで並びを保持したリストのリストを求める。

リストと連続させる数を指定して、List の List で結果を求める。 public static <T> List<List<T>> lengthSequencelist(List<T> list, int length){ int last = list.size() - length + 1; return Stream.concat( IntStream.range(0, last).boxed().map(i->list.subList(i</t></list<t></t>…