作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个 double 列表。
List<Double> averagesAndSums = new ArrayList<>();
有 20 个 double 值。这些值是发票对象的平均值和总和值。
public class Invoice {
private double average;
private double sum;
//const, getters, setters
}
因此它具有这样的结构
index 0 = average, index 1 = sum, index 2= average, index 3 = sum,
index 4 = average, index 5 = sum ... so on.
如何根据这些平均值和总和值创建包含 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());
更新
一旦你有两个列表,如果你想要 Invoice
对象,你可以流式传输一个列表并构造该对象,例如:
List<Invoice> invoices = IntStream.range(0, sums.size())
.mapToObj(i -> new Invoice(averages.get(i), sums.get(i)))
.collect(Collectors.toList());
更新2
正如 @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());
关于java - 如何从双值创建对象列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54589585/
我是一名优秀的程序员,十分优秀!