我有一份双打名单.
List<Double> averagesAndSums = new ArrayList<>();
Run Code Online (Sandbox Code Playgroud)
它有20个双倍值.这些值是Invoice对象的平均值和总和值.
public class Invoice {
private double average;
private double sum;
//const, getters, setters
}
Run Code Online (Sandbox Code Playgroud)
因此它具有这样的结构
index 0 = average, index 1 = sum, index 2= average, index 3 = sum,
index 4 = average, index 5 = sum ... so on.
Run Code Online (Sandbox Code Playgroud)
如何从这些平均值和总和值中列出10个发票对象?
您可以使用流进行奇数均匀过滤,例如:
List<Double> list = Arrays.asList(1d, 5d, 3d, 6d);
List<Double> averages = IntStream.range(0, list.size())
.filter(i -> (i % 2 == 0))
.mapToObj(i -> list.get(i))
.collect(Collectors.toList());
List<Double> sums = IntStream.range(0, list.size())
.filter(i -> (i % 2 != 0))
.mapToObj(i -> list.get(i))
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
更新
一旦你有两个列表,如果你想要Invoice对象,你可以流过一个列表并构造对象,例如:
List<Invoice> invoices = IntStream.range(0, sums.size())
.mapToObj(i -> new Invoice(averages.get(i), sums.get(i)))
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
UPDATE2
正如@ernest_k建议的那样,这也可以在一次迭代中完成,例如:
List<Invoice> invoices2 = IntStream.range(0, list.size())
.filter(i -> (i % 2 == 0))
.mapToObj(i -> new Invoice(list.get(i), list.get(i + 1)))
.collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)
你可以做
List<Invoice> result = new ArrayList<>(averageAndSums.size() / 2);
for (int i = 0; i < averageAndSums.size(); i += 2){
result.add(new Invoice(averageAndSums.get(i), averageAndSums.get(i + 1)));
}
Run Code Online (Sandbox Code Playgroud)
但是这个奇怪形状的名单是如何形成的呢?
| 归档时间: |
|
| 查看次数: |
105 次 |
| 最近记录: |