Tôi đang tìm kiếm một tương đương tao nhã của đoạn mã này sử dụng Java 8 của suối:Tạo một bản đồ sử dụng Java8 suối trên một cấu trúc dữ liệu lồng nhau
Collection<X> xs = ...;
Map<B, A> map = new SomeMap<>();
for (X x : xs) {
A a = x.getA();
Collection<B> bs = x.getBs();
for (B b : bs)
map.put(b, a);
}
Đó là một là một chút quá khó khăn đối với tôi như tôi có thể không nghĩ về một sự kết hợp sử dụng flatMap và Collectors.toMap mà sẽ thực hiện các chức năng mong muốn.
compilable dụ:
import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
import java.util.Map;
public class Application {
public static class A {}
public static class B {}
public static class X {
private A a;
private Collection<B> bs;
public X(A a, Collection<B> bs) {
this.a = a;
this.bs = bs;
}
public A getA() {
return a;
}
public Collection<B> getBs() {
return bs;
}
}
public static void main(String[] args) {
X x1 = new X(new A(), Arrays.asList(new B(), new B()));
X x2 = new X(new A(), Arrays.asList(new B()));
Collection<X> xs = Arrays.asList(x1, x2);
Map<B, A> map = new HashMap<>();
for (X x : xs) {
A a = x.getA();
Collection<B> bs = x.getBs();
for (B b : bs)
map.put(b, a);
}
}
}
Bạn có chắc chắn nó là 'xs.getA()'? – tkroman
bạn khai báo một 'Bản đồ ' nhưng bạn sử dụng 'map.put (b, a)' - ý của bạn là gì? – assylias
Ồ, vâng. Đó là Bản đồ . –