水曜日, 3月 19, 2014

Java 8: ストリーム

Java 8 では文字列をストリームとして扱うことができます。

import java.util.*;
public class LambdaStream
{
public static void main(String args[])
{
String[] values={"Argentine","Angola","Brussels","Brazil"};
List<String> list=Arrays.asList(values);
list.stream().filter(s->s.length()>6).map(s->"["+s+"]").forEach(System.out::println);
}
}
ストリームにフィルターを追加し、要素を選択することもできます。

下記のコードでは要素の文字長を指定し、表示するものです。

import java.util.*;
public class LambdaStream
{
public static void main(String args[])
{
String[] values={"Argentine","Angola","Brussels","Brazil"};
List<String> list=Arrays.asList(values);
list.stream().filter(s->s.length()>6).map(s->"["+s+"]").forEach(System.out::println);
}
}
下記のコードは要素の頭文字を指定し、表示します。

import java.util.*;
public class LambdaTest
{
public static void main(String args[])
{
String[] values={"Argentine","Angola","Brussels","Brazil"};
List<String> list=Arrays.asList(values);
list.stream().filter(e->e.startsWith("A")).forEach(e->System.out.println(e));
}
}

Java 8: ラムダ式

Java 8 が正式にリリースされました。

ラムダ式が導入されるということで、さっそく試してみました。

ラムダ式とは関数を抽象化したもので、コンパクトにコールバック関数の引渡し・定義ができます。

import java.awt.*;
public class LambdaListener extends Frame
{
Button button=new Button("OK");
LambdaListener()
{
add(button);
button.addActionListener(e->System.out.println("OK button pressed."));
setSize(100,100);
setTitle("Lambda");
setVisible(true);
}
public static void main(String args[])
{
LambdaListener test=new LambdaListener();
}
}
ラムダ式のフォーマットですが、

 (引数) -> 定義

となります。Lisp などとは異なる形式ですが、内部クラスなどと比較して簡潔にコールバック関数が定義できます。

public class LambdaMethod
{
public static void main(String args[])
{
Test test=(name)->System.out.println("Hello "+name);
test.say("name");
}
private interface Test
{
public void say(String name);
}
}


Qt: 外部プログラムを起動する

  Qt/C++ のアプリは、外部へ直接アクセスできます。これはネットアプリでは不可能な Qt のメリットです。 外部プログラムを起動することもできます。QProcess::startDetached() を使うと独立したプロセスを立ち上げることができます。 この QProces...