Java

Java9 APIリファレンス日本語ドキュメント

ふと気付くと日本語版が出ていた。 この手のドキュメントは文学作品と違って英語で十二分に理解できるけど、 訳されたものがあればそれなりに便利ではある。お箸の国の人だもの。

com.sun.net.httpserver

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について、 条件が初めて満たされる直前までのデータで構成されたStreamを返すような機能は、 Java 8までだと、Spliteratorとかを使って実現できなくはないけれど、 実際書いてみようとしたら面倒くさいことこの上ない。Streamに新たに加わ…

UTF-8 Property Resource Bundles

プロパティリソースバンドルのファイルにUTF-8が使えるようになった。 おかげでnative2asciiで変換する必要が無くなった。 というかnative2asciiコマンドそのものが無くなってしまった。 Greeter.java import java.text.MessageFormat; import java.util.Res…

Applicationである必要はない

前述の試し書きしたGtkTestはApplicationを継承しているが、 FileChooserをそのまま使用しているだけなので、 別にApplicationのフレームワークに乗っかる必要はないだろう。 import javafx.application.Platform; import javafx.stage.FileChooser; public …

Enable GTK 3 on Linux

せっかくだからJava 9のドキュメントを適当に読んでいる。これまでlinux上でのグラフィカルなアプリケーションはGTK+2ベースだったが、 9ではそれ以外にGTK+3もサポートするようになった。 GtkTest.java import javafx.application.Application; import java…

Version 9 API Specification

APIドキュメントにバージョン8までと異なる訳分からない変更が。 なぜかページ上部のナビゲーション部分が位置固定スタイルに。 スクロールしても常に表示されて鬱陶しいことこの上ない。 頻繁に使用するようならこの仕様変更は便利だけれど、 ほとんど使う…

9をとりあえず入れておく

使うかどうかは置いておいて。とりあえず適当に新しい特徴を使ってみる。 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 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 …

日付の1に意味はない

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…

leap day

$ 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 今年は閏年です。 $

Java8 on Ubuntu 14.04 LTS

LinuxディストリビューションとしてはUbuntu 14.04 LTSを使っている。 どうやらOpenJDKに関しては8を公式のリポジトリに入れてくれそうにないみたいなので、 今までppaは避けていたが、とりあえずOracleのを入れることにする。 パッケージリポジトリとして、…

ファイルによる画像データ授受 #5

実のところ、示した方法では環境やタイミングへの依存を解決していない。 プログラム自体でもそれ以外由来でもいいが処理を重くすると覿面に失敗する。 環境にあまり依存することなく正しくやりとりするには、 gnuplotに公開API、特に制御関係のものがあれば…

ファイルによる画像データ授受 #4

元々のプログラムにおける画像データの受け渡しが標準入出力経由だったことから、 画像データから画像オブジェクトを生成するのにImageIO#read(InputStream)を使っていた。 しかし今のコードではFileオブジェクトがあるのだからImageIO#read(File)でもよかっ…

ファイルによる画像データ授受 #3

一時ファイルが既に存在していた時のトラブルを避けるために、 作成時にまだ存在しないことが保証されているファイルを使うことにしよう。 また、プログラムと同じ場所に一時ファイルが置かれるのは行儀が悪いかもなので、 とりあえず一時ファイルを作成する…

ファイルによる画像データ授受 #2

根拠のない数値が入ったままではいや〜んなので除去してみる。 Java側でファイルの存在を確認して開くというのでもいいかもしれないが、 逆転の発想でgnuplotがファイルを作成する前にJavaでファイルを作ってしまおう。 Javaで例外が発生するのはファイルが…

ファイルによる画像データ授受 #1

標準入出力での画像の受け渡しはいろいろと面倒なことがあるので、 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…