2015年4月13日 (月)

[Java][Ruby] 配列の偶数番目の要素を抜き出す

配列の偶数番目の要素だけを抜き出すシンプルな書き方ってどんな書き方なんだろうか?

import java.util.ArrayList;
import java.util.List;
import java.util.Arrays;
import java.util.stream.IntStream;
public class Even {
    public static void main(String ... args) {
        List<String> ary = new ArrayList<String>(Arrays.asList("a","b","c","d","e"));
        IntStream.range(0, ary.size())
            .filter(e -> e % 2 == 1)
            .mapToObj(e -> ary.get(e))
            .forEach(e -> System.out.println(e));
    }
}

Ruby で書くと

ary = ["a", "b", "c", "d", "e"]
ary = 1.step(ary.size - 1, 2).map{|e|
  ary[e]
}
puts ary

Ruby だと、with_index を使う方法がネットで見つかった。

ary = ["a", "b", "c", "d", "e"]
ary = ary.select.with_index{|e, i|
  i % 2 == 1
}
puts ary

| | コメント (0) | トラックバック (0)

2015年4月11日 (土)

[Java] stream のソート

List をソートするときに stream() を使うと sorted()。
使わない場合は、sort()。
紛らわしい。


import java.util.List;
import java.util.ArrayList;
import java.util.Arrays;
public class Stream {
public static void main(String ... args) {
List<Integer> ary = new ArrayList<Integer>(Arrays.<Integer>asList(3,1,4,2));
/*
ary.sort((x,y) -> y - x);
for (int i : ary) {
System.out.println(i);
}
*/
ary.stream()
.sorted((x, y) -> y - x) // not sort()
.forEach((x) -> System.out.println(x));
}
}

| | コメント (0) | トラックバック (0)

2015年4月10日 (金)

[Java] ドット(.)区切りの文字列の分割

Javaでドット(.)区切りの文字列を分割しようとしてはまった。

public class Split {
    public static void main(String...args) {
        String[] ary;
        String s1 = "a.b.c";
        ary = s1.split(".");
        System.out.println(ary.length);
        for(String s : ary) {
            System.out.println(s);
        }
    }
}

これをコンパイルして実行するとこうなる。

$ java Split
0

Rubyだと

s1 = "a.b.c"
ary = s1.split(".")
puts ary.size
ary.each{|s|
 puts s
}

を実行するとこうなる。

$ ruby split.rb
3
a
b
c

Java の String.split の引数は文字列ではなく正規表現として解釈される。 ドット(.)は正規表現では任意の文字を指すのでドット(.)として扱うためにはエスケープしないといけない。

public class Split {
    public static void main(String...args) {
        String[] ary;
        String s1 = "a.b.c";
        ary = s1.split("\\.");
        System.out.println(ary.length);
        for(String s : ary) {
            System.out.println(s);
        }
    }
}

これを実行すれば、

$ java Split
3
a
b
c

| | コメント (0) | トラックバック (0)

2005年7月 5日 (火)

[Comp][Java] Seasarのすなあそび

ここのところ、イベントには参加していなかったので、たまには刺激を受けてみようと思い、申し込んだ。 本編は参加無料だし。 相変わらずJavaを触ってないので、やじ馬根性です。

S2.NETには、少し興味あります。 S2Containerの「コンポーネントの設定ファイルへの登録を不要にする」というのも気になります。 設定ファイルのあれやこれやが面倒で、そこがトラブルの元になるようなイメージがあります。 そのトラブルが軽減されるような仕組みであればいいなと期待してます。

今のところ、Javaを触る機会は無いのですけど。

| | コメント (0) | トラックバック (0)