1
からMap
を作成しようとしています。Stream
を使用しています。Java 8ストリーム:マップされた値でマップするリスト
key
は
value
は、いくつかの派生データでなければならない、元のアイテムの名前でなければなりません。
.map()
後ストリームはInteger
秒で構成され、.collect()
の時に私は、以前のlambda
から「foo」をアクセスすることはできません。元のアイテムは.toMap()
でどうやって入手できますか?
これはStream
で行うことができますか?.forEach()
が必要ですか?
(以下のコードはデモンストレーション用ですが、実際のコードははるかに複雑で、doSomething()
の方法はFoo
にできません)。
import java.util.ArrayList;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;
public class StreamTest {
public class Foo {
public String getName() {
return "FOO";
}
public Integer getValue() {
return 42;
}
}
public Integer doSomething(Foo foo) {
return foo.getValue() + 23;
}
public Map<String, Integer> run() {
return new ArrayList<Foo>().stream().map(foo -> doSomething(foo)).collect(Collectors.toMap(foo.getName, Function.identity()));
}
public static void main(String[] args) {
StreamTest streamTest = new StreamTest();
streamTest.run();
}
}
ああ私が見るので、変換は.map()ではなくコレクション段階で行われますか? – lilalinux
私はそれが唯一の選択肢であるかどうかはわかりませんが、この場合はコレクタ内部のマッピングを行うのが最も簡単な解決策であると確信しています。 @lilalinux –
なぜ 'new Foo()'が配列になっているのか理解するのに数秒かかりました。 1つの要素ストリームが必要な場合は、読者を混乱させることなく 'Stream.of(new Foo()) 'を使うことができます... – Holger