文字列を1文字ずつにばらす方法としては、String.substring()メソッドを使って文字数分ループする方法がありますが、ここでは1行で文字の配列に変換する方法を紹介します 文字列を文字の配列に一発で変換する Stringクラスには、文字を区切り文字で分割するsplit()というメソッドがあります。 このsplit()メソッドは、引数で区切り文字を指定することにより、String[]を返します。 実は、このsplit()メソッドは、この区切り文字に空文字(“”)を指定すると、一文字ずつに文字列が分解されたString[]を返します。 サンプルコードは以下 public static final void main(String[] args) { String str = "あいうえおABCかきくけこ"; String[] ar = str.split(""); Arrays.str
表題のとおりです。 shibuya-java.connpass.com で、発表してきました。 On stream-lazy-computation from mike_neck Mochida www.slideshare.net 実際のプレゼンの内容はもう少し丁寧かつ雑な資料でやりました。 JavaのStreamで学ぶ遅延処理実装パターン from mike_neck Mochida www.slideshare.net で、発表者で欠席した人や怪我でこれない人がいたので、勢いで作った発表もしました。 gradle2.4のルールベースモデルコンフィギュレーション from mike_neck Mochida www.slideshare.net 発表の元ネタは以前の mike-neck.hatenadiary.com と mike-neck.hatenadiary.com です。 La
表記の件について、JavaのListから作るStreamは操作中に変更をするとその後の挙動についてなんら結果を保証しないので、ListからStreamを作った場合は、変更をしないか、あるいは不可変なListに変換してから作るのが良いです。 と、書いておいてからなのですが、こんなツイート見かけました。 これは思わぬ結果 ステートフルな中間操作のsorted()かますと 最終的にListは空になるけどforEachで全て出力される。 なんでだろう? これで今日も眠れないw pic.twitter.com/864kLHyK8K— Yucchi (@Yucchi_jp) May 8, 2015 peekでListの要素を削除するというやってはいけないパターンです。 @Test public void intList() { List<Integer> list = IntStream.range(
この両者は、似ているようでいて、基本的には別モノです。表にしてみます。 Groovyのクロージャ java8のlambda式 導入時期 2003年 2014年03月 ローカル変数へのアクセス 読み書き可能 実質的にfinal(変数そのものに対しては読み込みのみ) 実装方法 Closure型のインスタンス MethodHandle, invokeDynamic.. 型推論の根拠 Closure<T>のTで返り値、@ClosureParamsで引数 FunctionalInterface(SAM型) 記法 { 引数 -> 本体 } { 本体 } {-> 本体 } (引数) -> { 本体 } (引数) -> 式 () -> { 本体 } 暗黙の動的なthis delegateにより実現 - 性能 ローカル変数をenclosingするため間接参照にするためのオーバーヘッドあり 性能上のオーバーヘ
JDK8およびJDK8u20では、GCログに関連する2つの便利な機能が追加されている。いずれの機能も2014/8現在最新のJDK7 update 67 には含まれていないが、JDK7u80にてバックポートされる予定。 GCログにpidと日付を含める (JDK8より) JAVA_OPTS="$JAVA_OPTS -Xloggc:/var/log/wildfly/gc_%p_%t.log" => 実際のファイル名例 : gc_pid31455_2014-08-31_14-20-16.log.0GCログのフォーマットに%pを入れるとpid形式のプロセスIDが付与される。また%tを付与すると"_2014-08-31_14-20-16"のようにGCログファイルを作成した日付時分秒が追加される。かつてGCログはJavaを再起動すると同じファイルが上書きされて消えてしまうため、出力先を-Xloggc:g
今まで扱ってきたストリームはすべてシーケンシャルに処理を行うストリームでした。 しかし、本連載の第2回で記述したように、Project Lambdaの導入理由はパラレル処理にあります。そこで、今月は満を持してパラレルストリームについて紹介していきます。 パラレル処理といっても、パラレルストリームの場合、いくつかの約束を守っていればそれほど難しいことはありません。 早速、試してみましょう。 パラレルストリームの生成 パラレルストリームといっても、パラレルストリーム用のインタフェースがあるわけではありません。今まで通り、StreamインタフェースもしくはIntStreamインタフェースなどを使用します。 異なるのは、ストリームを生成するためのメソッドです。 コレクションからストリームを生成する場合、シーケンシャルなストリームであればstreamメソッドを使用してきました。パラレルストリームの場
前回まで、7回に渡ってストリームの機能について紹介してきました。 ところで、筆者はこれまで何度もProject Lambdaについての講演やハンズオンを行ってきました。そこで、よく言われるのが、「頭では分かっているけど、いざ書こうとすると書けない」、であるとか「APIは分かっていても、どこから書き始めればいいか分からない」ということです。 そこで、今回はStream APIのまとめとして、いくつかの例題をとりあげ、以前の書き方からストリームを使った書き方に変換していくということをやってみたいと思います。 public class Customer { // 顧客のグレードを表すenum public enum Grade { S, A, B } // 名前 private String name; // 取引額 private long transactionValue; // 顧客のグレ
FilesにnewBufferedReaderというのが増えたのですが、文字コード指定を省略するとUTF-8としてファイルを読み込んでくれます。 http://docs.oracle.com/javase/jp/8/api/java/nio/file/Files.html#newBufferedReader-java.nio.file.Path- それとは別で、CharsetにはdefaultCharSet()というこのJava仮想マシンのデフォルトの文字コードを返してくれるメソッドが用意されています。 http://docs.oracle.com/javase/jp/8/api/java/nio/charset/Charset.html#defaultCharset-- 旧来のFileReaderとかはdefaultCharSetを使ってファイルを読み込んでくれるわけで・・・・・・ ドキ
If this code is compiled: import java.io.IOException; public class FunWithMultiCatch { public static void main(String[] args) { Runnable r = () -> { try { Object o = null; o.getClass(); throw new IOException(); } catch(IOException | IllegalArgumentException e) { System.out.println("KO !"); } catch(RuntimeException e) { System.out.println("OK !"); } }; r.run(); } } javac generates this code: privat
※ サンプルがJDK7までとJDK8までで意味が変わっていてわかりにくいという指摘があったので、少し直しました。 ※ boxedを使う書き方だと無駄なAutoboxingが走るとの指摘を頂きましたのでmapToObjを利用するように変えました。 Java8の目玉機能の一つにStream APIがあります。 目玉機能だけあって、先日のJava Day Tokyo 2014を含めて色んな所で発表やブログの記事が公開されているので、どんなものかを知ってる人は多いと思います。 Stream APIといえば「".parallel()"と書くだけで並列化してスピードアップ出来る!」という魅惑的なキーワードで紹介されることが多いので、並列化のための仕様だと勘違いされそうですが、そうではありません。 ※ もちろんそういった記事の中をちゃんと読めばそう単純な話じゃないことも分かります。 むしろ、並列化に関し
本日、Java Day Tokyo 2014に来ています。 で、ついさっきのセッションで「JDK8ではInvokeDynamic(以下、indy)の実装を一新したのですごく速くなったよ」という話を聞いたので、Groovyのindyモードで試してみました。 Groovyは2.0(現在は2.3)でindy対応されています。 それ以前はGroovy独自機構による性能改善が行われていました。 しかし、JDK7からのホヤホヤなindyを前提にしてしまうと、JDK6で動かなくなってしまいます。 Groovyは下位互換性が重視されているので、これは問題です。 というわけで、indyが使えないJDK上でも使えるように既存の独自機構もそのまま残っているし、indy不要バージョンが標準になっていて、indyオプションを利用可能にするには$GROOVY_HOME/lib配下を$GROOVY_HOME/indy配
Oracle | Hardware and Software, Engineered to Work Together
Oracle | Hardware and Software, Engineered to Work Together
Oracle | Hardware and Software, Engineered to Work Together
日本オラクルはJava SEの最新版「Java SE 8」のドキュメントの日本語版を公開しました。本日、都内で開催中のイベント「Java Day Tokyo 2014」の基調講演で発表されました。 ドキュメントは主に「Java SE 8ドキュメント」と「Java SE 8 API仕様」の2つから構成されています。 「Java SE 8 ドキュメント」はJava SE 8の構成要素をまとめた資料で、Java SE Development Kit(JDK)、Java SE Runtime Environment(JRE)、およびJava SEのAPIそれぞれが提供する機能を参照でき、「Java SE 8 API 仕様」は、Java SEが提供するクラスやインターフェースなどの一覧を示しています。 下記は「Java SE 8ドキュメント」のWebページです。「Java SE 8 API仕様」は、
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く