我使用的是 Java 8,我可以获得 max
和 min
。效果很好,但我还需要检查另外 10 个属性的 max
和 min
(例如,User
年龄、 Prop 1、 Prop 2、 Prop 3等...)。
我怎样才能做到这一点而不是重复相同的代码 10 次?
IntSummaryStatistics summaryStatistics = data.stream()
.mapToInt(User::getProp2)
.summaryStatistics();
int max = summaryStatistics.getMax();
int min = summaryStatistics.getMin();
并将数据归一化在 0 到 5 之间
data.stream().forEach(d -> {
d.setNormalized(5 * ((d.getProp2() - min) / (max - min));)
});
最佳答案
您可以尝试结合 ToIntFunction 进行重构的好旧方法。界面
public static void normalization(Collection<User> data, ToIntFunction<User> getProp) {
IntSummaryStatistics summaryStatistics = data.stream()
.mapToInt(getProp)
.summaryStatistics();
int max = summaryStatistics.getMax();
int min = summaryStatistics.getMin();
data.forEach(d -> d.setNormalized(5 * ((getProp.applyAsInt(d) - min) / (max - min))));
}
参数ToIntFunction<User> getProp
用于“age, prop1, prop2, prop3”部分。
调用方法:
normalization(data, User::getProp2);
关于java - 流式传输多个属性 - Java 8(基本示例),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65998703/