またJava8の話。
Scalaの場合、ListでもStream*1でもVectorでも同じメソッドあるので、あえてどのclassなのかは明示しません。基本はJavadoc読んで雑に調べただけで、ちゃんと全部実行して試したわけじゃないので、明らかに間違ってたら教えて下さい。
http://download.java.net/lambda/b88/docs/api/java/util/stream/Stream.html
http://hg.openjdk.java.net/lambda/lambda/jdk/file/38379cea9127/src/share/classes/java/util/stream/Stream.java
Scalaとメソッド名も機能だいたい同じもの
Scalaに直接対応するものが存在しない(?)もの
- unordered
- peek
- 副作用専用メソッド?
- forEachOrdered
- noneMatch
- anyMatch(scalaだとexists)の逆?
- <U> U reduce(U identity,BiFunction accumulator,BinaryOperator<U> combiner)
- 多分ない・・・はず。ただ最終目的としては、ほかのreduceと同様に、Scalaのreduce、reduceOptionもしくはfoldと同じみたい。使い方よくわかってないのであとで気が向いたら調べる
- collect
- isParallel
- 型で判別すれば、Scalaでもできる?
- spliterator
- Spliterator がなんなのかよくわかってないのであとで
- <A> A toArray(IntFunction> generator)
- type erasureの関係で存在かな?(Scalaだったらそういうの勝手にやってくれる)明示的に返すArrayそのものを作成して渡さないといけないらしい。シグネチャや使い方は全然違うが、目的としてはScalaのtoArrayと同じだと思う
IntとLongとDoubleの場合それぞれあるもの
- mapToInt
- mapToLong
- mapToDouble
- flatMapToInt
- flatMapToLong
- flatMapToDouble
メソッド名が異なる(けど機能はほぼ同じ)もの
Java8 | Scala | 補足コメント |
---|---|---|
limit | take | |
sequential | seq | |
parallel | par | |
Stream |
drop | |
Stream |
slice | |
forEach | foreach | |
T reduce(T identity,BinaryOperator |
fold | |
Optional |
reduceOption | |
anyMatch | exists | |
allMatch | forall | |
findFirst | headOption | sortの考え方がちがうみたいなので、概念的に本当に直接対応するのかよくわかってない |
findAny | headOption | findFirstと型は全く同じ。気が向いたらfindFirstとfindAnyの違いしらべる・・・ |
static メソッド
- builder
- Scalaに対応するものがあるといえばあるが・・・
- empty
- コンパニオンオブジェクトに同じ名前で存在
- of
- Scalaの場合apply。引数1つのやつはsingle
- iterate
- コンパニオンオブジェクトに同じ名前で存在
- generate
- Scalaの場合continually*2
あと、ListやSetやMapに変換とか、maxByやminByなどは、CollectorsというオブジェクトのstaticメソッドとしてCollector型で用意してあるみたいですね
http://download.java.net/lambda/b88/docs/api/java/util/stream/Collectors.html