Java
ふと気付くと日本語版が出ていた。 この手のドキュメントは文学作品と違って英語で十二分に理解できるけど、 訳されたものがあればそれなりに便利ではある。お箸の国の人だもの。
Java9でパッケージcom.sun.net.httpserverがAPI仕様のメインドキュメントに加わった。 今までの版でもドキュメントは存在していたがオプショナルなドキュメントだった。 このパッケージの説明にはパッケージ内のクラスを利用したHTTPサーバの例が示されてい…
考えてみたら、unmodifiableMapに渡すのは、 Mapであって配列ではないのだから、 new HashMap<>()で明示的に作成するまでもない。 最初のソースをunmodifiableMap用に少し変えるだけでいいのだった。 import java.util.Collections; import java.util.List; …
アノテーションで警告を隠蔽することなくということなら、 immutableではなくunmodifiableなMapならいけそう。 import java.util.Collections; import java.util.HashMap; import java.util.List; import java.util.Map; ...snip entry(202, "breakpoint") )…
immutableなMapを二つ使って双方向に辞書引きできるようにする。 import java.util.List; import java.util.Map; import java.util.stream.Collectors; import static java.util.Map.entry; public class BidirectionalMapTest { public static void main(St…
順序をもつStreamについて、 条件が初めて満たされる直前までのデータで構成されたStreamを返すような機能は、 Java 8までだと、Spliteratorとかを使って実現できなくはないけれど、 実際書いてみようとしたら面倒くさいことこの上ない。Streamに新たに加わ…
プロパティリソースバンドルのファイルにUTF-8が使えるようになった。 おかげでnative2asciiで変換する必要が無くなった。 というかnative2asciiコマンドそのものが無くなってしまった。 Greeter.java import java.text.MessageFormat; import java.util.Res…
前述の試し書きしたGtkTestはApplicationを継承しているが、 FileChooserをそのまま使用しているだけなので、 別にApplicationのフレームワークに乗っかる必要はないだろう。 import javafx.application.Platform; import javafx.stage.FileChooser; public …
せっかくだからJava 9のドキュメントを適当に読んでいる。これまでlinux上でのグラフィカルなアプリケーションはGTK+2ベースだったが、 9ではそれ以外にGTK+3もサポートするようになった。 GtkTest.java import javafx.application.Application; import java…
APIドキュメントにバージョン8までと異なる訳分からない変更が。 なぜかページ上部のナビゲーション部分が位置固定スタイルに。 スクロールしても常に表示されて鬱陶しいことこの上ない。 頻繁に使用するようならこの仕様変更は便利だけれど、 ほとんど使う…
使うかどうかは置いておいて。とりあえず適当に新しい特徴を使ってみる。 Convenience Factory Methods for Collectionsとか。 Hello.java import java.util.stream.Collectors; import java.util.List; import java.util.Map; public class Hello { public …
今日はのびのびJava 9が本番リリースされる予定ですが、 カリフォルニア時間でしょうから日本時間では明日になるのかな? まあ最近はとんとJavaと無縁になっているんですが。
ある月の第三日曜日から次の月の第三日曜日までの日数の分布を求める。 import static java.time.DayOfWeek.SUNDAY; import java.time.LocalDate; import java.time.YearMonth; import static java.time.temporal.ChronoUnit.DAYS; import static java.time.…
第三日曜日になるday of monthの度数分布を求める。 import static java.time.DayOfWeek.SUNDAY; import java.time.YearMonth; import static java.time.temporal.TemporalAdjusters.dayOfWeekInMonth; import java.util.HashMap; import java.util.Map; imp…
結局のところ、 import static java.time.DayOfWeek.SUNDAY; import java.time.YearMonth; import static java.time.temporal.TemporalAdjusters.dayOfWeekInMonth; public class ThirdSundays { public static void main(String[] args) { final YearMonth …
day of monthは何でもいいのだったらatDayの引数に1というリテラルを直接書かずに、 d.atEndOfMonth().with(dayOfWeekInMonth(3, SUNDAY)) でもいいという話も。 しかし、atDayにおける引数1は現行のどんな暦でも多分正当な引数であるはずだし、 0並みに1も…
STARTやENDは年月を指定するためにあるので、 day of monthがついたちであることに特に意味はない。 そこで、LocalDateでなくYearMonthの方が意図を読みやすくなるかもしれない。 import static java.time.DayOfWeek.SUNDAY; import java.time.YearMonth; im…
前記事の書き方で十分と思いつつ無駄にStreamで書き換えてみる。 import static java.time.DayOfWeek.SUNDAY; import java.time.LocalDate; import static java.time.temporal.ChronoUnit.MONTHS; import static java.time.temporal.TemporalAdjusters.dayOf…
$ java ThirdSundays | sort -t- -k3 2016-05-15 2016-10-16 2016-01-17 2016-04-17 2016-07-17 2016-09-18 2016-12-18 2016-06-19 2016-03-20 2016-11-20 2016-02-21 2016-08-21月の初めが日曜日なら第三日曜日は1+14=15日になり、 月曜日であれば7+14=21日…
今年の各月の第三日曜日がいつなのかを見てみる。 import static java.time.DayOfWeek.SUNDAY; import java.time.LocalDate; import static java.time.temporal.TemporalAdjusters.dayOfWeekInMonth; public class ThirdSundays { public static void main(S…
昔ながらのDate/Calendarクラスを利用する場合。 import java.text.DateFormat; import java.util.Calendar; import static java.util.Calendar.DAY_OF_WEEK; import static java.util.Calendar.DAY_OF_WEEK_IN_MONTH; import static java.util.Calendar.SUN…
Date and Time APIの場合。 import static java.time.DayOfWeek.SUNDAY; import java.time.LocalDate; import static java.time.temporal.TemporalAdjusters.dayOfWeekInMonth; public class ThirdSunday { public static void main(String[] args) { System…
$ cat LeapYear.java | expand -4 public class LeapYear { public static void main(String[] args) { System.out.printf("今年は%sです。%n", java.time.LocalDate.now().isLeapYear() ? "閏年" : "平年"); } } $ java LeapYear 今年は閏年です。 $
LinuxディストリビューションとしてはUbuntu 14.04 LTSを使っている。 どうやらOpenJDKに関しては8を公式のリポジトリに入れてくれそうにないみたいなので、 今までppaは避けていたが、とりあえずOracleのを入れることにする。 パッケージリポジトリとして、…
実のところ、示した方法では環境やタイミングへの依存を解決していない。 プログラム自体でもそれ以外由来でもいいが処理を重くすると覿面に失敗する。 環境にあまり依存することなく正しくやりとりするには、 gnuplotに公開API、特に制御関係のものがあれば…
元々のプログラムにおける画像データの受け渡しが標準入出力経由だったことから、 画像データから画像オブジェクトを生成するのにImageIO#read(InputStream)を使っていた。 しかし今のコードではFileオブジェクトがあるのだからImageIO#read(File)でもよかっ…
一時ファイルが既に存在していた時のトラブルを避けるために、 作成時にまだ存在しないことが保証されているファイルを使うことにしよう。 また、プログラムと同じ場所に一時ファイルが置かれるのは行儀が悪いかもなので、 とりあえず一時ファイルを作成する…
根拠のない数値が入ったままではいや〜んなので除去してみる。 Java側でファイルの存在を確認して開くというのでもいいかもしれないが、 逆転の発想でgnuplotがファイルを作成する前にJavaでファイルを作ってしまおう。 Javaで例外が発生するのはファイルが…
標準入出力での画像の受け渡しはいろいろと面倒なことがあるので、 Javaが実装された環境であれば使えることが期待されるファイルシステムを利用する。 import java.io.*; import javax.imageio.ImageIO; public class GnuplotUser6 { private static final …
これまでgnuplotの端末設定はpngのデフォルトのままにしていたが、 画像サイズや画素のビット深度などを変えてもこのやり方が通るかどうか確かめてみた。 import java.awt.image.BufferedImage; import java.io.*; import javax.imageio.ImageIO; public cla…