のリストを減らします。私はこれをJava 8ストリームのみを使用して一意のオブジェクトのリストに減らしたいと思っています(これは古いスキルの手段でこれを行う方法ですが、これは実験です)。グループと私がマージされる必要があり、多くの重複や、いくつかのフィールドを持つオブジェクトのリストを持っているオブジェクト
これは私が今持っているものです。マップ建物は無関係のようで、コレクションはバッキング・マップの図であり、()の値、およびあなたはより具体的なコレクションを取得するために新しいArrayList<>(...)
でそれをラップする必要があるので、私は本当にこのことを好きではありません。おそらくより一般的な削減操作を使用するより良いアプローチはありますか?
@Test
public void reduce() {
Collection<Foo> foos = Stream.of("foo", "bar", "baz")
.flatMap(this::getfoos)
.collect(Collectors.toMap(f -> f.name, f -> f, (l, r) -> {
l.ids.addAll(r.ids);
return l;
})).values();
assertEquals(3, foos.size());
foos.forEach(f -> assertEquals(10, f.ids.size()));
}
private Stream<Foo> getfoos(String n) {
return IntStream.range(0,10).mapToObj(i -> new Foo(n, i));
}
public static class Foo {
private String name;
private List<Integer> ids = new ArrayList<>();
public Foo(String n, int i) {
name = n;
ids.add(i);
}
}
中間マップを使用せずにこの "古いスキール"(従来はラムダ/ストリームなし)を実装することは可能ですか?私は重複が潜在的に入力のどこでも発生する可能性があるので、すべての入力が処理されるまで、それらはすべてどこかでバッファリングされなければならないと思います。 –