Stream API 中間操作の sorted と peek について使い方をまとめました。 sorted:ソート ① 引数:なし / 戻り値:Stream<R> ② 引数:Comparator<T> / 戻り値:Stream<R> sortedメソッドは2種類あり、①の場合は保持されてるデータがjava.lang.Comparableを実装してる必要があります。Comparable を実装してるクラスは Java Platform SE 8 で確認して下さい。 ②の場合は関数型インターフェースのComparator<T>を渡してやる事で、ソート順を制御でき、Comparableを実装してないクラスでもソートする事が可能です。 Comparator<T>は比較を行う関数型インターフェースであり、実装が必要なメソッドはint compare(T o1, T o2)で引数を2つ受け取り、in
Java8で追加されたforEachメソッドの使い方について簡単にまとめました。最初はfor文から全て置き換えて使えると思ってましたが、そうは上手くいかなかったようです。 forEachメソッドとは forEachメソッドはコレクションや配列に対して繰り返し処理を行うためのメソッドです。今までだとfor文で記述していた部分をラムダ式で置き換える事ができるようになりました。 Java8では追加された機能の Stream API を使用してコレクションや配列の複数の値に対して様々な処理を行えます。使い方としてはコレクションや配列を一度Streamに変換して各メソッドを実行していくわけですが、forEach と spliterator メソッドに関しては Iterable インターフェースに default メソッドとして追加されていますので、Streamに変換する必要がありません。 ここで少し
JavaSE8で追加されたjava.util.Optionalにはnullとの戦いに終止符を打ってもらいたいと思っているんですが、思ってるだけだと何も起こらないので、使い方とか思ったこととかを一通り書いておきます。 Optionalのファクトリメソッド Optionalのインスタンスメソッド 値を取得するもの 値を使用するもの Optionalのまま扱うもの まとめ なお、一通りと言いつつOptionalIntとかはスルーしています。機会と書くことがあればそのうち書くかもしれません。 Optionalについては諸事情(遅筆とか理解不足とか分量とか)によりJavaエンジニア養成読本では軽い紹介にとどまっておりましたので、補足としてお読みいただけると幸いです。あと、この辺も参考にどうぞ。 OptionalのJavadoc 一通り触って適当にコメント書いたコード(GitHub/sandbox)
Sonatype NEXUS入門。 NEXUSはMavenのパッケージリポジトリサーバ。 今回はOSS版を入れる。 インストール JDK6以上をあらかじめインストールしておく。 ここからNEXUS OSSをダウンロードして任意の場所(例えば、「C:\nexus」「/data/nexus」)へ展開する。 展開すると2つのディレクトリがでる。 C:\nexus>ls -l total 0 drwxrwxrwx 1 user group 0 Jul 14 10:03 nexus-2.11.3-01 drwxrwxrwx 1 user group 0 Jul 14 10:04 sonatype-work ※UnxUtilsを使用しています。 Linux系の場合は以下のようにバージョンが変わった時用にシンボリックリングの作成とユーザの作成を行う。 $ ln -s nexus-2.11.3-01 ne
避けるべき状況ですが、残念なことにこのようなことは珍しくありません。解析に必要な情報を漏らさず取得するためには、サービス開始前に入念な準備が必要ですが、現実にはそこまで時間をかけられない場合もあり、往々にして準備不足となる場合があるからです。 こういった不幸な状況を防ぐ手段の1つとして、本稿では「HeapStats」というツールを利用した障害解析方法を紹介します。 HeapStatsとは 「HeapStats」は、NTT OSSセンタが開発を行い2013年にOSS(オープンソースソフトウェア)として公開したJavaVM障害解析支援ツールです。 Javaアプリケーションにおけるメモリ不足(OutOfMemoryError)やデッドロックといった障害を素早く解決することを目的として開発されました。特に、Javaヒープメモリ内の状態など、従来は高い負荷をかけて取得する必要があった情報を、低オーバ
ちょっと試したいことがあって、HTTPサーバを用意したかったのですがApacheとかをインストールするのも面倒だったので、JDK 6から同梱されている簡易HTTPサーバを使ってみることにしました。 が、実際に書いたのはJavaも面倒で、Groovyですが(笑)。 参考にしたのは、このサイトです。 http://www.techscore.com/tech/Java/JavaSE/JavaSE6/8/#mustang8-5 APIドキュメントは、こちら。 http://docs.oracle.com/javase/jp/6/jre/api/net/httpserver/spec/index.html Jerseyと組み合わせ使うこともできるみたいですよ。 http://news.mynavi.jp/column/jsr/018/index.html で、書いたコードはこちら。 LightHt
4年ぶりにJavaでネットワークプログラミング。 はじめは java.net.Socket か java.net.HttpURLConnection クラスで実装しようと思っていたけど、commons にて HttpClient を発見。使ってみたら、スゲー便利。そうそう、こういうのを探してました! Jakarta Commons - HTTP Client ダウンロードするときは、パッケージ依存している commons-logging と commons-codecs もご一緒にどうぞ。 早速トライアルということで、POSTメソッドでIDとパスワードを送ってログインするプログラムを、Socket、HttpURLConnection、HttpClient の3つのバージョンで書いてみた。 まず、Socket の場合。あ、try ~ catch とかは省略してますんでご注意を。 String
byte型は8ビットの整数だが、符号付きの為最上位ビットが符号(+/-)を表し、値の範囲は0~255ではなく-128~127となる。 このbyte型の値を符号なしの値(範囲が0~255)として扱いたい場合は、byte型よりもビット数が多いint型等に変換すればよい。 ただし単純に変換すると、符号拡張で負値は負値のままとなってしまうので注意が必要。 例えば、byte型の-1(16進数表示でFF)を単純にint型に変換(int型変数への代入による暗黙の変換)すると、変換後の値も同じく-1のままとなる。 public class Main { public static void main(String[] args) { byte byteValue = (byte) 0xFF; int intValue1 = byteValue; System.out.println(String.form
Buffer(ByteBuffer・CharBuffer) JDK1.4で新設されたnew I/O関連に、バッファークラスがある。 でもちょっと癖があって分かりづらい(苦笑) 概要(特徴) Bufferの用途・存在意義は、「バッファー」という名前が示す通り、データを保存(追加)し、そこから取得する為のもの。ではあるのだけれど。 基本的に、「データをある程度まとめてバッファーに入れ、入れたもの全てを読み取る」という使い方をする。 (キューの様な、追加して少し読み取って(まだデータが残ってるけど)また追加して…という使い方ではない) (書き込みと読み取りを順不同に行うのがキュー。バッファーは基本的に交互に行う) バッファーサイズ(キャパシティー)の上限まで行ったら、それ以上追加できない。オーバーフロー(例外が発生)する。 (StringBuffer(StringBuilder)の様な、上限まで
JaveEE6に対応しているGlassfish 3.0を使う方が手っ取り早いとは思いますが、、サーブレットコンテナとしてTomcat6.0を使った環境でJAX-RSを使ってみます。 JAX-RSの実装としては、JavaによるRESTfulシステム構築では、Jersey, Apache CXF, JBoss RESTEasyなんかが紹介されています。CXFはJAX-WSも含んでいて大きそうなので、今回は参照実装であるJersey 1.5を使ってみます。前提としてMavenを使ったWebアプリケーションのプロジェクトがあるとします。 pom.xmlでの依存ライブラリの追加 pom.xmlにrepositoryとdepenencyを追加します。jersey-jsonはJSONを使用する場合に追加します。Jacksonが使われるようです。 <repositories> <!-- 省略 --> <r
ここ数日、Nettyについて調べていたので理解できたことを書きます。 JBoss Netty Netty は Java で非同期、イベント駆動のネットワークアプリを作るためのフレームワークです。Netty を使うと早くて簡単にハイパフォーマンス、ハイスケールでメンテナンス性がいいものが作れます。いいとこ取りの全部乗せです。 なぜハイパフォーマンス、ハイスケールか? Netty は Java NIO(New I/O)をラップしていて、ノンブロッキングなIO操作ができます。そのため、1つのコネクションにずっと1スレッドを割り当てる必要がないため効率のよいリソース消費をします。従来のブロッキングなOIO(Old I/O)もサポートしており、僅かな変更で好きな方を使えます。また、NIOの複雑なByte BufferをChannelBufferというオブジェクトに抽象化し、不必要なコピーが発生しない
その名のとおりJavaBeansの為のValidationの仕様であるJSR303ですが、近頃でもないですがHibernateはもちろん、その他SpringやOvalなどの周辺フレームワークの対応が進んでずいぶん使いやすくなってきました。 ところでアプリケーション作っててValidationの仕組みって毎回悩みませんか?私がJavaでWebアプリケーションつくりはじめた頃なんかだとStruts1.xが全盛期でvalidation.xml、validation-rule.xmlとか使って書いてましたが(今考えれば二度とやりたくないですねw)、今でも毎回どのチェックをどのレイヤ(アプリケーションレイヤ?ドメインレイヤ?)に持たせるかとか、データストアに問い合わせしないといけないValidationって画面の入力だけでチェックできるのとどう管理しようかなとか、色々と悩むこともしばしばです。最近D
0x00. はじめに 筆者はJava製のWAF(Web Application Firewall)、Guardian@JUMPERZ.NETの開発とメンテナンスを行っている。元は自社のシステムを守るために(そして半分趣味で)作ったものだが、数年前にこれをコアのエンジンとしてさらに拡張し、SaaS型の商用サービス「Scutum(スキュータム)」を立ち上げた。 その後順調に顧客を獲得することができ、システムリソース的にも増強が必要となる段階などを経験した。Google、mixiやはてな等、さまざまな大規模サイトのインフラエンジニアの方々がインフラ設計に関する考え方などをインターネット上で公開してくれているおかげで、初期のシステム設計時に「将来的にスケールアウト可能なシステム構成にしておくこと」が重要であるということがわかっていた。その教えに従っていたおかげで、リソースの逼迫(ちなみに今回はCP
Play frameworkを使ったことがある人はどれぐらいいるんだろうか。 こんなに面白いフレームワークとは思わなかった。 いや、フレームワークというより、プラットフォームです。 まえにJava on Railsなんて宣伝を見てしまったせいでスルーしていた。 たしかに「Rails使いに媚びてDjangoをJavaにポートした」と言えないこともないけど。 ためしてから宣伝してください。迷惑です。 見所はコマンドラインなんかじゃない。まあ、Python for Windowsがついてくるのは確かに面白いけど。 なんといってもJavaの使い方が革命的に面白い。 なんと表現すればいいのか。 「コンパイルさえ通せば、あとはまかせとけ」 といったところか。 staticメソッドを積極的に使い、記述をシンプルにすることが使命であるようだ。 まずはこの三つの機能を見てみます。 1. Bind an HT
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く