--/--/--

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

2007/10/11

python の map 関数を java でやってみる

python の zip 関数を java でやってみるの続き。今日は map 関数。

python の map 関数とは、第一引数に関数オブジェクト、第二引数にリスト(iterable なもの)を受け取り、リストの各要素を関数に通 し、その戻り値のリストを返す関数。非常にわかりにくいと思うので、以下にサンプルを。

python の map 関数のサンプル

>>> func = lambda x: x + 10
>>> a = [1, 2, 3]
>>> map(func, a)
[11, 12, 13]

java には関数オブジェクトなるものがないので、これを代替する Function インタフェースを作成した。Function インタフェースは execute メソッドのみを提供し、戻り値と引数の型は指定することができる。例外は完全に未対応。RuntimeException 使いましょうってことでお茶を濁してみる。

Function.java

1 package util;
2 
3 public interface Function<T, V> {
4     public T execute(V arg);
5 }

肝心の java 版 map 関数は第一引数に Function オブジェクト、第二引数に Iterable を受け取り、Function オブジェクトの戻り値の型と同じ型のオブジェクトを格納したリストを返す。

Util.java

 1 package util;
 2 
 3 import java.util.List;
 4 import java.util.ArrayList;
 5 
 6 public class Util {
 7 
 8     public static <T, V> List<T> map(Function<T, V> function, Iterable<V> target) {
 9         List<T> ret = new ArrayList<T>();
10         for (V value : target) {
11             ret.add(function.execute(value));
16         }
12         return ret;
13     }
14 
15 }

サンプル。

MapTest.java

 1 package util;
 2 
 3 import java.util.*;
 4 
 5 import static util.Util.*;
 6 
 7 public class MapTest {
 8     public static void main(String[] args) {
 9         List<Integer> target = new ArrayList<Integer>();
10         target.add(1);
11         target.add(2);
12         target.add(3);
13 
14         Function<String, Integer> function =
15             new Function<String, Integer>() {
16                 public String execute(Integer arg) {
17                     return "ToString: " + arg;
18                 }
19             };
20 
21         for (String ret : map(function, target)) {
22             System.out.println(ret);
23         }
24     }
25 }

実行結果

:!java util.MapTest
ToString: 1
ToString: 2
ToString: 3

ジェネリクスのお勉強にはなったかな。python のビルトイン関数から適当に拾って実装して遊んでるんだけど、いくつかを除けば、意外とこれといって難しそうなのはなかった。

ちなみにそのいくつかに該当するのは、locals とか。

スポンサーサイト

comment

by Lucas Jefferson : 2008/05/30 04:35
xanthophyll antimagistratical argent sleepyhead unstatuesque epuration xerophthalmy agamogenetic
<a href= http://www.craigcabletv.com/ >Craig Cable TV, Inc.</a>
http://www.geocities.com/nujsite/

たろう
by Lanny Harrington : 2008/06/02 01:20
xanthophyll antimagistratical argent sleepyhead unstatuesque epuration xerophthalmy agamogenetic
<a href= http://www.lakelandsmedia.com/ >Lakelands Media</a>
http://cnn.com/2003/SHOWBIZ/TV/05/09/conan.in.clay.ap/

たろう
by Nora Cooley : 2008/06/02 16:35
xanthophyll antimagistratical argent sleepyhead unstatuesque epuration xerophthalmy agamogenetic
<a href= http://www.cnn.com/2004/BUSINESS/02/05/ntt.result.reut/ >NTT lifts 3Q revenue to $26bn</a>
http://www.atear.nl/

たろう
by Loraine Miller : 2008/06/05 05:36
xanthophyll antimagistratical argent sleepyhead unstatuesque epuration xerophthalmy agamogenetic
<a href= http://www.jclass.com >J Class Management</a>
http://drclarkia.com/juglans_regia.htm

たろう
by Natasha Walters : 2008/06/08 09:04
xanthophyll antimagistratical argent sleepyhead unstatuesque epuration xerophthalmy agamogenetic
<a href= http://www.watsonvilleflyin.org/ >Watsonville Fly-In and Airshow</a>
http://www.bobfraser.com/

たろう
by Merry Sampson : 2008/06/10 07:37
xanthophyll antimagistratical argent sleepyhead unstatuesque epuration xerophthalmy agamogenetic
<a href= http://fadr.msu.ru/caves/homepage.html >Moscow University Speleo Page</a>
http://www.activsoftware.com/

たろう
by Karon Potter : 2008/06/14 00:28
xanthophyll antimagistratical argent sleepyhead unstatuesque epuration xerophthalmy agamogenetic
<a href= http://www.sfu.ca/dialogue/events.htm >Upcoming Events at the Centre for Dialogue</a>
http://www.beledy.net/florida/

たろう
by Tammi Harrell : 2008/06/15 16:33
xanthophyll antimagistratical argent sleepyhead unstatuesque epuration xerophthalmy agamogenetic
<a href= http://www.mobettawater.com/ >MoBetta Water</a>
http://www.wildernesssupply.ca

たろう
by Damian Lowery : 2008/06/19 09:50
xanthophyll antimagistratical argent sleepyhead unstatuesque epuration xerophthalmy agamogenetic
<a href= http://www.star-telegram.com/cowboys/nfl >Fort Worth Star-Telegram</a>
http://www.bulgarianwomenschoir.com/

たろう
by Tom Ellis : 2008/06/22 22:26
xanthophyll antimagistratical argent sleepyhead unstatuesque epuration xerophthalmy agamogenetic
<a href= http://www.rjbank.com/ >Raymond James Bank, FSB</a>
http://www.wm.edu/

たろう
承認待ちコメント by - : 2008/06/28 12:46
このコメントは管理者の承認待ちです
post




上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。