2016-07-01 108 views
0

这里的情景:的Java:如何分组列表元素的属性

我有段对象的列表:我需要按组列表段。

**细分数据**

[CODE]: 9X-594 (D/ET) - [SET]: 1 
[CODE]: 9X-600 (D/ET) - [SET]: 2 
[CODE]: 9X-602 (D/ET) - [SET]: 3 
[CODE]: 9X-596 (D/ET) - [SET]: 4 

[CODE]: 9X-970 (S/ET) - [SET]: 5 
[CODE]: 9X-579 (E/ET) 

[CODE]: 9X-974 (S/ET) - [SET]: 6 
[CODE]: 9X-589 (E/ET) 
[CODE]: 9X-599 (E/ET) 

[CODE]: 9X-964 (S/ET) - [SET]: 7 
[CODE]: 9X-581 (E/ET) 

我需要这些组数据为这种格式:

List<CodeSample> samples = new ArrayList<CodeSample>(); 

哪里CodeSample是包含段的列表中选择一个类。

public class CodeSample { 

    private int set; 
    private List<Segment> segments; 

    //getters/setters here 
    ... 
} 

我需要组片段通过集,是这样的:

samples = [ 
    { set: 1, [{code: "9x-594 (D/ET)"}]}, 
    { set: 2, [{code: "9x-600 (D/ET)"}]}, 
    { set: 3, [{code: "9x-602 (D/ET)"}]}, 
    { set: 4, [{code: "9x-596 (D/ET)"}]}, 
    { set: 5, [{code: "9x-970 (D/ET)"}, {code: "9x-579 (D/ET)"}]}, 
    { set: 6, [{code: "9x-974 (D/ET)"}, {code: "9x-589 (D/ET)"}, {code: "9x-599 (D/ET)"}]}, 
    { set: 7, [{code: "9x-964 (D/ET)"}, {code: "9x-581 (D/ET)"}]} 
] 

我需要创建包含段的列表样本的列表(分组)。

这种情况下最好的方法是什么?

+1

您使用的是Java 8吗? – pinkpanther

回答

2
List<CodeSample> result = 
    segments.stream() 
      .collect(Collectors.groupingBy(Segment::getSet)) 
      .entrySet() 
      .stream() 
      .map(entry -> new CodeSample(entry.getKey(), entry.getValue())) 
      .collect(Collectors.toList()); 
+0

谢谢你和更短的代码!除了使用Java 8 Streams的较短代码之外,它比在java 7中编写代码更快吗? –

+0

不,您可能可以编写或更高效的Java 7代码。但它会更长,更容易出错,更难以阅读和理解。 –

+0

非常感谢JB :) –

相关问题