Java

リスト順のままのグルーピングカウント

リストをキーによってカウントする=グルーピングしてカウントするのに変な要求の題を突き付けられました。 例えば、以下のようなクラスのObjectのリスト、(内部にカウンタを持ちグルーピングカウントの結果を持つもの)とします。 public class Item{ publ…

Arrays.asList が固定長のリストを返すことを忘れてはならない

訳あって String を確実に作れるカンマ区切りの文字列と単独の宣言済の String 数個 から 単独の宣言済の String を先頭に、String を作ることに少し悩みました。例えば、、 String str = "a,b,c"; String h1 = "1"; String h2 = "2"; String h3 = "3"; Stri…

リストの比較、ListDiff

6年も前は、リストを比較して処理するのに、ブログ投稿したことを考えてたhttp://oboe2uran.hatenablog.com/entry/2010/07/01/121003http://oboe2uran.hatenablog.com/entry/2010/07/01/121003 http://oboe2uran.hatenablog.com/entry/2010/06/26/132425htt…

CSV書込み(2)

CSV書込み、(1) - Oboe吹きプログラマの黙示録のつづきです。net.sf.csv4j.CSVWriter を使い、ヘッダ行もデータ行も呼び出し側の与えるデータの問題だと割り切って考えて以下の関数型インターフェースを用意すれば、とても簡潔になる。 import java.io.Ou…

CSV書込み、(1)

5年も前に CSVを生成する Javaプログラムコードを、csv4j を使って書いていた。 2011年 3月 http://oboe2uran.hatenablog.com/entry/2011/03/19/101643CSV書き込み(1) - Oboe吹きプログラマの黙示録http://oboe2uran.hatenablog.com/entry/2011/03/22/21…

Wicket 6.x→7.x でファイルダウンロード時のファイル名の注意

Wicket でファイルダウンロードのファイル名を日本語を使用する場合、Wicket 6.x では URLエンコードしていた。 Wicket 7.x 移行では必要ないことに気がついた。 scheduleRequestHandlerAfterCurrent を使う場合。。 try(IResourceStreamWriter writer = new…

Jasperreports のコンパイル実行を、Stream 処理でまとめる

Jasperreports のコンパイル実行を、Stream 処理でまとめてみました。 /** * @param directoryPath jrxmlを置いたディレクトリPATH * @return Map<String, Throwable> key=コンパイル処理実行のjrxmlファイルPATH、value=コンパイルエラー発生のThroawble */ public static Map<String, Throwable> </string,></string,>…

Jasperreports 5.6.0 で Java8 LocalDate を出力するには

Jasperreports 5.6.0 で、Java8 LocalDate を出力するには、Jassperreports がテンプレートを読んで実行するコンパイラ を別に用意しないとならなに。もう、Jassperreports が Java 8 に対応しないからだ。 コミュニティを探した結果。Eclipse の jdt コンパ…

Stream で LocalDateリストを生成

最終目的は、jQuery ui の datepicker 等を使用しないで、Javaからカレンダーを作成してスケジュールを 描画編集すること。DBに用意するデータと連携するために jQuery だけじゃ苦しいので Java でベースになる 日付のリストを先ず生成する。 簡単なものか…

Java で横長カレンダーを書くための処理

先日、jQuery で横長の帯状のカレンダーを書くための処理を書いて 横長カレンダーを書く - Oboe吹きプログラマの黙示録 、では Java だったらどう書く? と思ったので書いてみました。例えば、 LocalDate start = LocalDate.parse("2016-12-22"); LocalDate …

groupingBy で chunk

grouping by のメモ Map<String, Long> countmap = authors.stream().collect(Collectors.groupingBy(t->t.level, Collectors.counting())); Map<String, List<Author>> mapAuthors = authors.stream().collect(Collectors.groupingBy(t->t.level, Collectors.mapping(u->u, Collectors.toList()</string,></string,>…

リストから順序を維持した Pair を作成する

文字列でもなんでも良いのだが、"a","b","c"... リストの順序に従った「ペア」を順序にしたがって作りたい要求があったとする。"a" と "b" "b" と "c" "c" と "d"のように順にペアを作る。ペアは、AbstractMap.SimpleEntry を継承したクラスとする。 public …

コレクションの比較→ BiConsumer に index と比較結果

先日、2つのオブジェクトの比較、equals がそのまま使えること、"" 空文字=すなわち存在しないことと null を同義とみた処理で書いてた。 ・・・・実質、String と Integer にしかそのまま使えないけど、それしか目的にしてなかったのでそういうつもりで …

BiConsumer を比較処理の記述で使う

2つのオブジェクトを比較処理するものが大量にある時、if 文をたくさん書くのが嫌になり if文を隠ぺいして差がある時の処理を Consumer と Biconsumer で書くことを考えた。 public static <T, U> boolean parse(T t, U u, Consumer<T> delete, Consumer<U> add, BiCons</u></t></t,>…

Stream でインデックスを求める

リストに存在するオブジェクトが何番目=インデックスを求める方法、Java8 Stream で求める。 見つからない場合は、-1 が返れば良しとする。という要求で、サンプルを書くと。。。 List<String> list = Arrays.asList("a", "b", "c", "d", "e", "f"); /* このリス</string>…

Apache POI Excel 入力規則の読み込み(2)

Apache POI Excel の入力規則を参照するのに、前の記事、 Apache POI Excel入力規則の読み込み(1) - Oboe吹きプログラマの黙示録 このように毎回書いてはいられない。そこで、XSSFSheetオブジェクトを渡して後から何回でも問い合わせするクラスを書いてみ…

Apache POI Excel入力規則の読み込み(1)

Apache POI で Excel の入力規則によるプルダウンの情報を読み取る場合、同じシート内のセルで入力規則の値を格納していないと読み取れない。このように同じシート内にある入力規則の情報を参照するコードサンプルを書いてみた。 (ただし、このサンプルは縦…

リストを作る時の fromJson 書式

Google gson でリストを復元する時の fromJson の書き方をよく忘れるのでメモ Gson gson = new GsonBuilder().serializeNulls().create(); List<Foo> list = gson.fromJson(string, new TypeToken<Collection<Foo>>(){}.getType());</collection<foo></foo>

GSON でjson生成時の null を処理する(2)

先日書いたGSON使用時の String型のNULLパターン { "aaa": "null" } でなくて、 { "aaa": "" } にするための TypeAdapterFactory を書き直しました。 import java.io.IOException; import com.google.gson.Gson; import com.google.gson.TypeAdapter; import…

GSON でjson生成時の null を処理する場合、

google GSON でJSONを生成する場合、そのままだと、nullオブジェクトは無視(出力されない)なので、GsonBuilder の serializeNulls() を呼び出して、 { "a": "null" } のように出す。 しかし、String オブジェクトの結果として、{ "a": "" } が欲しい場合が…

GSON と LocalDate / LocalDateTime のシリアライズ・デシリアライズ

Java7をやめてJava8で開発するようになり、java.util.Dateを使わなくなり、 Google gson で LocalDate / LocalDateTime をシリアライズ・デシリアライズするのに 簡単に書ける方法を探すのに苦労したのでその過程と結果です。 GsonBuilder の registerTypeAd…

文字列区切り→リスト

Java7 では、数字がカンマなどで区切られた文字列を split して List<Integer> にするのに、 こんなコードを書いていた。。。 String str = "1,2,,4,5"; List<Integer> list = new ArrayList<Integer>(); for(String s: str.split(",") ){ if ( ! "".equals(s) ){ list.add(Integer.pars</integer></integer></integer>…

Map.Entryの実装は用意しておく。

import java.util.Map の Entry は、汎用的に実装を作っておくと良いかもしれない。 import java.util.Map; /** * Map.Entry実装. */ public class Pair<K, V> implements Map.Entry<K, V>{ public K key; public V value; public Pair(){} public Pair(K k, V v){ key =</k,></k,>…

Optional のifPresent の否定形

Java8 Optional には、ifPresent はあるけれどこれの否定系=NULL の場合、コンシューマ(Consumer)呼び出すものがない。 やはり欲しい。。 でも、こんな方法がある、Optional の map 関数で値が存在する場合を、Runnable に変換する方法で再度、Optional に…

csv4j をラムダ式で。。。

CSVを読み込んで処理する csv4j の利用をラムダ式で書きたくなってきた。 ラムダ式の対象にしたいのは、CSVLineProcessor を使う CSVStreamProcessor である。 ラムダ式にしないこれまでの使用サンプル try{ CSVStreamProcessor csvStreamProcessor = new…

Optional の orElseThrow を使う

Wicket を Java8 で書くようになったせいなのか、Wicket のバリデータを書くのが嫌にになってきた。 たしかにバリデータを書いてセットして、Form の onError が call される方式は、 入力項目が少ない場合に手軽で良いと思う。でも項目が多くて Form のonSu…

Wicket の IRequestParameters と Java8

Wicket でプログラムを書いていて、form送信結果を取得するのに、 getRequestCycle から、org.apache.wicket.request.IRequestParameters を取得して 抽出することはあまりやらないのだけど、 IRequestParameters#getParameterNames() で、受け取るパラメー…

Stream API で List→Map

Java8 Stream API で List→Map 生成に考えられる2通りのうち、どちらが良いのだろうか?例) Item クラス、キーになる int 型の code と String の name を持つ。List<Item> list = createList(); // 生成される。。。/* <R> R collect(Supplier<R> supplier, BiConsumer<R,? super T></r,?></r></r></item>…

Java8 StreamでWicket ListViewセル結合

昨日書いた groupingBy の利用として、HTML-tableタグ rowspan結合をサンプルとして作ってみました。 keyでグルーピング可能な任意オブジェクトリストを受け取って最終目的は以下のような表を作ることです。 Wicket の ListView でこの表を作ります。 対象の…

groupingBy

toMap でオブジェクトをグループ分けするか、groupingBy を使うか? サンプルとして、以下のようなオブジェクトと、リストを作るメソッド public class Author{ public String level; public String name; public Author(String level, String name){ this.l…

IntSream → List<Integer>

Memo List<Integer> list = IntStream.range(1, 13).boxed().collect(Collectors.toList()); list.stream().forEach(System.out::println); results 1 2 3 4 5 6 7 8 9 10 11 12 ================ UnaryOperator<String> stringUpperCase = (s)->s.toUpperCase(); System.out.</string></integer>…

任意の日付→月末日

任意の日付から、月末日を求めるのに、Java7では、わざわざ Calendar を介してしていたので、 コードを綺麗にする為にメソッドにしていた。。 public static Date getEndDate(Date date){ final Calendar cal = Calendar.getInstance(); cal.setTime(date);…

mybatis JSR310 の LocalDate など

Java7→Java8 移行で、mybatis を使うプロジェクトで注意しなければならないのは、 java.util.Date の代わりに java.time.LocalDate / LocalDateTime に置き換わった時です。 mybatis でタイプハンドラを指定やらないとなりません。MITライセンスで、このハ…

removeIf

そろそろ、Java 8 を使い始めるとしよう。 今までアホなコーディングとして、List の展開、 for(E e:list) の中で、list.remove(e); を書いてしまうと、 当然、 Exception in thread "main" java.util.ConcurrentModificationException at java.util.ArrayLi…

正規表現プロセッサ

csv4j を久しぶりに使って思った。なぜ今まで正規表現プロセッサを 書かなかったのだろうか?ごちゃごちゃと力づくのコーディングをして放置して しまったのであろう。 反省すべきであった。 パターンマッチで一致するごとに実行するメソッドをインターフェ…

Windows7 で、JavaService.exe

Windows7 で、JavaService.exe は動くか? 答は、Yes である。ただし普通に実行しては次のようにエラーになる。 UranService という名前でサービス登録しようとすると、 Error attempting to install UranService service アクセスが拒否されました。 Window…