2017-09-08 45 views
1

考慮到TGroup類和SOption類。轉化列表<T>到地圖<T.Prop,列表<T>>使用流API

我有以下代碼:

public static class Group { 
    List<Option> options; 

    public List<Option> getOptions() { 
     return options; 
    } 

    public void setOptions(List<Option> options) { 
     this.options = options; 
    } 

    public Group(List<Option> options) { 
     this.options = options; 
    } 
} 

public static class Option { 
    int id; 

    public int getId() { 
     return id; 
    } 

    public void setId(int id) { 
     this.id = id; 
    } 

    public Option(int id) { 
     this.id = id; 
    } 
} 

public static void main(String[] args) { 
    final Option option1 = new Option(1); 
    final Option option2 = new Option(2); 
    final Option option3 = new Option(3); 
    final Option option4 = new Option(4); 
    final Option option5 = new Option(5); 
    final Option option6 = new Option(6); 
    final Group group1 = new Group(Arrays.asList(option1, option2)); 
    final Group group2 = new Group(Arrays.asList(option3, option4, option5, option6));   
} 

我要創建地圖,optionId將是一個關鍵和組將是一個價值

因此它應該是

1 - group1 
2 - group1 
3 - group2 
4 - group2 
5 - group2 
6 - group2 

不流API允許解決這個任務?

+0

這些例子是正確的,還是3-6的意思是2,我的答案是基於假設的例子是錯的 – jrtapsell

回答

2

你可以做這樣的:

Stream.of(group1, group2) 
    .flatMap(p -> p.getOptions().stream().map(q -> new Pair<>(p,q))) 
    .collect(Collectors.toMap(
     p -> p.getValue().getId(), 
     p -> p.getKey())); 
  • 首先它獲得團體
  • 然後對這些選項與他們
  • 然後將它們放入一個地圖

在這個例子中的對是javafx.util.Pair,儘管其他人可以在其位置使用,如果願意。

+0

什麼是Pair類? – gstackoverflow

+1

你應該考慮重命名流變量。而不是'p'和'q',諸如'''''''option''或'pair'這樣的名字更具可讀性。 – basst314

+0

@gstackoverflow我認爲他引用了[Apache Commons Pair-Class](https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/tuple/Pair.html) – basst314

0

請嘗試以下操作,但我假設您的輸出3-6意味着爲group2。

final Map<Number,String> m = new HashMap<>(); 
    group1.getOptions().stream().forEach(p -> {m.put(p.getId(), "group1");}); 
    group2.getOptions().stream().forEach(p -> {m.put(p.getId(), "group2");}); 
    System.out.println(m); 
相關問題