2020-06-01から1ヶ月間の記事一覧

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

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

Gson の toJson と JsonWriter を併用する

Google gson の toJson と JsonWriter は、どちらか一方を使うことが多かった。 toJson(Object src, Type typeOfSrc) だけでなく、 toJson には、JsonWriter に結果を書き込むメソッドも用意されている。JsonWriter で書きながら、途中で任意のクラスオブジ…

MySQL 複数のTIMESTAMP DEFAULT CURRENT_TIMESTAMP

SQL

昔、MySQL で、複数のTIMESTAMP で DEFAULT CURRENT_TIMESTAMP を宣言しようとして、 DELIMITER // DROP TABLE IF EXISTS branch; // CREATE TABLE branch ( id INT NOT NULL AUTO_INCREMENT , branch_name VARCHAR(64) NOT NULL , created_at TIMESTAMP NOT…

MySQL AUTO_INCREMENTエラーの時のエラーコード

SQL

MySQL AUTO_INCREMENT がMAXを超える時、どんなエラーコードだっけ? と忘れていたので、簡単に用意して実行した結果は、INSERT の発生させる AUTO_INCREMENT のエラー Error Code: 1062. Duplicate entry '2147483647' for key 'PRIMARY' INTのMAX 21474836…

@JsonAdapter >registerTypeAdapter

Google gson で、@JsonAdapter と、GsonBuilder の registerTypeAdapter で指定するアダプター どちらが優先されるか?@JsonAdapter が、優先される。 oboe2uran.hatenablog.com

gson のシリアライズ用アノテーション

@Expose GsonBuilder で、excludeFieldsWithoutExposeAnnotation() を指定すれば、 @Expose が付いたフィールドだけシリアライズする Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation() .create(): @SerializedName フィールド名でなく…

LAST_INSERT_ID() の 0埋め

SQL

随分前に、MySQL の UNSIGNED ZEROFILL NOT NULL AUTO_INCREMENT のメモを書いていた。 https://oboe2uran.hatenablog.com/entry/2018/02/01/160016 CREATE TABLE branches ( id INT(4) UNSIGNED ZEROFILL NOT NULL AUTO_INCREMENT , branch_name VARCHAR(60…

無限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…

Gson での Big JSON の出力

Google Gson の場合、大きなサイズの JSON を出力、gson の toJson では一度作成元 Object を持ってしまうので、 大きなサイズの JSON は toJsonでは不向きである。 大きなサイズのJSON を出力をする場合、JsonWriter を使う。例) OutputStream out = // TO…

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…