2

lambdajを使用して、サブリストを1つのリストに結合できるようにしたい。

私は動作する反復バージョンを持っています:

// HDU elements are children of each subsystem
Collection<SpaceSystemType> subsystems = this.getAllSubsystems();
Set<SpaceSystemType> sources = new HashSet<SpaceSystemType>();

// Iterate the subsystems, collecting all the sources
for (SpaceSystemType subsystem : subsystems)
    sources.addAll(subsystem.getSpaceSystem()); // getSpaceSystem returns a List<SpaceSystemType>

return sources;

私はこれができるようになりたいです:

extract(subsystems, on(SpaceSystemType.class).getSpaceSystem());

しかし、extractは

List<List<SpaceSystemType>> 

だから私は間違ったコマンドを使用しているに違いありません。

どのlambdajコマンドが私が望むものを達成しますか?

4

2 に答える 2

6

私はflattenを使用してこれを解決しました:

List<SpaceSystemType> sources = flatten(extract(subsystems, on(SpaceSystemType.class).getSpaceSystem()));

SpaceSystemTypeは、要素のサブツリーを表すJAXBで生成されたクラスです。SpaceSystemType.getSpaceSystem()はリストを返すため、ツリーからすべての葉を取得するようにlambdajに指示する必要があります。

于 2011-04-04T17:49:21.260 に答える
1

@retrodoneの答えはそれほど理解しにくいと思いました。別の例を次に示します。

List<String> lista1 = Arrays.asList(new String[]{"1", "2", "3"});
List<String> lista2 = Arrays.asList(new String[]{"4", "5", "6"});

Bla bla1 = new Bla(lista1);
Bla bla2 = new Bla(lista2);

List<Bla> blas = Lists.newArrayList(bla1, bla2);

System.out.println(flatten(collect(blas , on(Bla.class).getLista())));
于 2014-06-27T15:25:00.570 に答える