reduce 数组求和 对象数组

1. 正常求和可以通过forEach或者for循环

var list = [{num:1},{num:10},{num:2},{num:2}]
function getCount(list) {
    let count = 0;
    list.forEach(i => {
         count += i.num;
     });
     return count + 5;
}
getCount(list)

2. 使用reduce

function getCount(list) {

//  acc:最后结果,cur:对象数组的每一项,5:求和的初始值,从5开始往上加,写0就是单纯求和
 return list.reduce((acc, cur)=>acc + cur.num, 5)
}
getCount(list)

在 Java 中,对象数组求和操作通常涉及自定义类的对象实例。为了实现这一功能,需要确保对象具有可加性的属性(通常是数值类型的字段),并通过适当的方法提取这些值进行汇总。 ### 定义一个简单的对象类 假设有一个名为 `Item` 的类,它包含一个表示数量的字段 `value`。以下是该类的定义: ```java public class Item { private double value; public Item(double value) { this.value = value; } public double getValue() { return value; } } ``` 此代码片段定义了一个简单类 `Item`,其主要目的是存储一个数值型成员变量 `value` 并提供获取它的方法[^1]。 ### 创建对象数组并执行求和操作 接下来展示如何创建此类的对象数组,并对其进行求和运算: #### 使用传统for循环 这是最直观的一种方式,适合初学者理解逻辑流程。 ```java public class ObjectArraySum { public static void main(String[] args) { Item[] items = new Item[3]; items[0] = new Item(10.5); items[1] = new Item(20.75); items[2] = new Item(30); double total = 0; for (int i = 0; i < items.length; i++) { total += items[i].getValue(); } System.out.println("Total sum of values: " + total); // 输出结果 } } ``` 在此例子中,我们初始化了一个含有三个元素的对象数组 `items` ,然后通过标准for循环遍历每个项,累加它们各自的 `value` 属性至总计数器 `total` 上[^3]。 #### 利用增强版For Loop简化语法 对于更加简洁优雅的写法,可以采用增强型 For 循环替代传统的索引控制结构: ```java public class EnhancedLoopObjectArraySum { public static void main(String[] args) { Item[] items = {new Item(1), new Item(2), new Item(3)}; double totalValue = 0; for(Item item : items){ totalValue += item.getValue(); } System.out.println("Enhanced loop total:" + totalValue ); } } ``` 这种方式不仅减少了错误的可能性还提高了代码可读性[^4]。 #### 运用Stream API 提供现代解决方案 随着Java版本更新带来的新特性之一便是Streams API,这允许开发者以声明式的风格处理集合数据源上的复杂查询。下面是如何应用streams api 来达到同样效果的例子: ```java import java.util.Arrays; import java.util.List; public class StreamApiObjectArraySum { public static void main(String []args){ List<Item> itemList=Arrays.asList(new Item(1d),new Item(2d),new Item(3d)); double sum=itemList.stream().mapToDouble(Item::getValue).sum(); System.out.println("Using Streams API:"+sum); } } ``` 在这里,我们将之前使用的数组改为列表形式以便更好地配合stream api使用。之后调用了`.stream()` 方法开启流模式,在链式调用里依次进行了映射(`map`) 转换动作以及终局规约(reduce-like operation)-即求和(sum)[^2]. ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值