首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用Java8 streams从List<Obj>中查找合计的值

基础概念

Java 8 引入了 Stream API,它提供了一种高效且易于并行处理数据的方式。Stream API 可以对集合进行各种操作,如过滤、映射、归约等。

相关优势

  1. 声明式编程:代码更加简洁,易于理解。
  2. 函数式编程:支持使用 Lambda 表达式和方法引用。
  3. 并行处理:可以轻松地将操作并行化,提高处理大量数据的效率。

类型

Java 8 Streams 主要有以下几种类型:

  • Intermediate Streams:中间操作流,如 filtermap 等。
  • Terminal Streams:终端操作流,如 collectreduce 等。

应用场景

当你需要对集合进行复杂的操作,如过滤、映射、聚合等时,使用 Stream API 可以大大简化代码。

示例代码

假设我们有一个 Obj 类,其中包含一个 getValue 方法用于获取对象的值:

代码语言:txt
复制
public class Obj {
    private int value;

    public Obj(int value) {
        this.value = value;
    }

    public int getValue() {
        return value;
    }
}

我们可以使用 Java 8 Streams 从 List<Obj> 中查找合计的值:

代码语言:txt
复制
import java.util.Arrays;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<Obj> objList = Arrays.asList(
            new Obj(10),
            new Obj(20),
            new Obj(30)
        );

        int sum = objList.stream()
                         .mapToInt(Obj::getValue)
                         .sum();

        System.out.println("合计的值: " + sum);
    }
}

解释

  1. 创建 StreamobjList.stream()List<Obj> 转换为一个 Stream。
  2. 映射值.mapToInt(Obj::getValue) 将每个 Obj 对象映射为其 value 属性的整数值。
  3. 求和.sum() 对映射后的整数值进行求和操作。

遇到的问题及解决方法

问题:Stream 操作中的空指针异常

原因:可能是由于集合中包含 null 元素,或者映射操作中返回了 null

解决方法

  1. 过滤空元素
  2. 过滤空元素
  3. 处理映射中的 null
  4. 处理映射中的 null

参考链接

希望这些信息对你有所帮助!

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

  • Java8真不用再搞循环了?

    List 转换为 List 接下来我们再看一种情况。就是当我们现在有一个list。然后list里是一个自定义引用类型。然后我们需要遍历这个引用类型对象某个属性。...现在有一个list。然后我们需要这个list对象属性一个个拿出来,然后封装到一个新对象,然后放入一个新list。 这个时候java8怎么做呢?...,java8map reduce叫法其实就是借鉴了处理大数据那个MapReduce。...java8stream和java I/O那个stream有一点略微不同。 I/O那个stream更像是一个通道。...而java8stream指的是在数据流转过程还包含有动态处理,就像上图中一样,输入然后被map分开,然后分拣合并到reduce,然后输出一个你想要结果。

    4.5K120

    Java8使用Stream实现List对象属性合并(去重并求和)

    前言 在需求开发,我们需要对一个List对象进行唯一属性去重,属性求和,对象假设为Pool,有name、value两个属性,其中name表示唯一,需要value进行求和,并最后保持一份对象。...Java8流进行处理,将name相同对象进行合并,将value属性求和 * @Title merge * @Param [list] * @Return java.util.List...Java8流进行处理,将name相同对象进行合并,将value属性求和 * @Title merge * @Param [list] * @Return java.util.List...= list.stream() // 表示name为key,接着如果有重复,那么Pool对象o1与o2筛选出一个,这里选择o1, // 并把name重复,需要将value...Java8流进行处理,将name相同对象进行合并,将value属性求和,这里推荐第二种方法,既简单更符合Java8处理。

    7.4K10

    Java8使用Stream实现List对象属性求和、最大、最小、平均值

    Stream 使用一种类似用 SQL 语句数据库查询数据直观方式来提供一种对 Java 集合运算和表达高阶抽象。...这种风格将要处理元素集合看作一种流, 流在管道传输, 并且可以在管道节点上进行处理, 比如筛选, 排序,聚合等。...不会修改原来数据源,它会将操作后数据保存到另外一个对象。(保留意见:毕竟peek方法可以修改流中元素) 3....惰性求值,流在中间处理过程,只是对操作进行了记录,并不会立即执行,需要等到执行终止操作时候才会进行实际计算。 用法 今天,我们主要讲一下Stream求和、最大、最小、平均值。...).max(); // 最小 OptionalInt min = list.stream().mapToInt(Pool::getValue).min(); // 平均值

    13.7K60

    java8 Streams API 详解(上) -- 入门篇

    引言 多年前,我们在介绍 java8 新特性时候,提到过作为 java8 一个亮点新特性 -- streams api 但上文中只是简单介绍了 streams api 基本用法,事实上,streams...2.4.2 Streams API 版本 下面,我们使用 Streams API 来优化上面的代码,整个流程就会显得简单了很多: private static List sortStudents...API 版本代码显然更加简洁和清晰,可读性、可维护性都有了显著提升,并且如果使用并发模式,Streams API 版本还会在性能上得到增强 由此可见,如果熟练掌握了 Streams API,那么在你开发过程...将流中所有参数汇总为一个集合并返回 min -- 求流数据最小 max -- 求流数据最大 count -- 计算流数据量 anyMatch -- 有任何元素命中规则则返回 true,可以用于无限元素流...后记 本文我们通过一个例子看到了 Streams API 是如何使用,以及列出了 java8 Streams API 包含所有操作 那么,这些操作具体应该如何使用呢?

    74610

    Excel公式技巧17: 使用VLOOKUP函数在多个工作表查找相匹配(2)

    我们给出了基于在多个工作表给定列匹配单个条件来返回解决方案。本文使用与之相同示例,但是将匹配多个条件,并提供两个解决方案:一个是使用辅助列,另一个不使用辅助列。 下面是3个示例工作表: ?...图3:工作表Sheet3 示例要求从这3个工作表左至右查找,返回Colour列为“Red”且“Year”列为“2012”对应Amount列,如下图4所示第7行和第11行。 ?...图4:主工作表Master 解决方案1:使用辅助列 可以适当修改上篇文章给出公式,使其可以处理这里情形。首先在每个工作表数据区域左侧插入一个辅助列,该列数据为连接要查找两个列数据。...16:使用VLOOKUP函数在多个工作表查找相匹配(1)》。...先看看名称Arry2: =ROW(INDIRECT("1:10"))-1 由于将在三个工作表执行查找范围是第1行到第10行,因此公式中使用了1:10。

    13.9K10

    Excel公式技巧16: 使用VLOOKUP函数在多个工作表查找相匹配(1)

    在某个工作表单元格区域中查找时,我们通常都会使用VLOOKUP函数。但是,如果在多个工作表查找并返回第一个相匹配时,可以使用VLOOKUP函数吗?本文将讲解这个技术。...最简单解决方案是在每个相关工作表中使用辅助列,即首先将相关单元格连接并放置在辅助列。然而,有时候我们可能不能在工作表中使用辅助列,特别是要求在被查找表左侧插入列时。...图3:工作表Sheet3 示例要求从这3个工作表左至右查找,返回Colour列为“Red”对应Amount列,如下图4所示。 ?...,我们首先需要确定在哪个工作表中进行查找,因此我们使用函数应该能够操作三维单元格区域,而COUNTIF函数就可以。...B:B"}),$A3) INDIRECT函数指令Excel将这个文本字符串数组元素转换为单元格引用,然后传递给COUNTIF函数,同时单元格A3作为其条件参数,这样上述公式转换成: {0,1,3

    24.2K21

    Java8新特性第3章

    Stream作为Java8新特性之一,他与Java IO包InputStream和OutputStream完全不是一个概念。...假设我们需要把一个集合所有形状设置成红色,那么我们可以这样写 如果使用Java8扩展后集合框架则可以这样写: 第一种写法我们叫外部迭代,for-each调用依次遍历集合元素。...如果我们想把蓝色形状提取到新List里,则可以: 操作会把其接收元素聚集到一起(这里是List),方法参数则被用来指定如何进行聚集操作。在这里我们使用以把元素输出到List。...另外,像这样生成操作和这样产生副作用操作都是天然急性求值,因为它们必须要产生具体结果。 我们拿下面这段代码举例: 这里和都是惰性,这就意味着在调用之前不会数据源中提取任何元素。...我们先来看看不用Streams API如何实现: 如果使用Streams API: 如果你喜欢我文章,就关注下我知乎专栏或者在 GitHub 上添个 Star 吧!

    79870

    java8实战读书笔记:初识Stream、流基本操作(流计算)

    本文是博主在学习《java8实战》一些学习笔记。 本节开始,将进入到java8 Stream(流)学习来。...:菜单列表查找出是素食菜品,并打印其菜品名称。...) { 9 System.out.println(n); 10} 那在java8,我们可以这样写: 1menu.streams() .filter( Dish::isVegetarian).map...例如,我们需要从菜单中提取所有菜品名称,在java8我们可以使用如下代码实现: 1版本1:List dishNames = menu.stream().map( (Dish d) -...其返回为Optional,这是jdk8引入一个类,俗称容器类,其主要左右是用来避免空指针,一种更加优雅方式来处理null。该类具体使用将在下一篇详细介绍。

    66330

    java8 Streams API 详解(下)-- 详解 Stream 操作

    引言 上一篇文章,我们介绍了 Streams API 是如何使用,以及列出了 java8 Streams API 包含所有操作。...java8 Streams API 详解(上) -- 入门篇 那么,这些操作具体应该如何使用呢? 本文,我们就来详细介绍一下每个操作具体用法和例子。 2....Intermediate 操作 Intermediate 操作是 Streams 可以重复出现转换操作,主要功能是将作为输入流转换为新流进行输出 2.1 map map 操作功能是最为基础和常用转换操作...super T> predicate); 和 map 一样,filter 是 Streams API 中使用最为频繁操作之一 他功能是将流部分元素过滤掉,上面的例子我们已经使用过 filter...,map 用来提供分布式处理,reduce 用来将数据进行聚合 在 Streams API ,reduce 也充当了组合元素角色,它提供一个起始(种子),然后依照运算规则,和前面 Stream 第一个

    71110

    java8实战读书笔记:初识Stream、流基本操作(流计算)

    菜单列表查找出是素食菜品,并打印其菜品名称。...) { 9 System.out.println(n); 10} 那在java8,我们可以这样写: 1menu.streams() .filter( Dish::isVegetarian).map...例如,我们需要从菜单中提取所有菜品名称,在java8我们可以使用如下代码实现: 1版本1:List dishNames = menu.stream().map( (Dish d) -...其返回为Optional,这是jdk8引入一个类,俗称容器类,其主要左右是用来避免空指针,一种更加优雅方式来处理null。该类具体使用将在下一篇详细介绍。...对累积器结果进行组合,因为归约reduce,java流计算内部使用了fork-join框架,会对流元素使用并行累积,每个线程处理流中一部分数据,最后对结果进行组合,得出最终

    62920

    初识Java8 Stream、流基本操作

    菜单列表查找出是素食菜品,并打印其菜品名称。...) { 9 System.out.println(n); 10} 那在java8,我们可以这样写: 1menu.streams() .filter( Dish::isVegetarian).map...例如,我们需要从菜单中提取所有菜品名称,在java8我们可以使用如下代码实现: 1版本1:List dishNames = menu.stream().map( (Dish d) -...其返回为Optional,这是jdk8引入一个类,俗称容器类,其主要左右是用来避免空指针,一种更加优雅方式来处理null。该类具体使用将在下一篇详细介绍。...对累积器结果进行组合,因为归约reduce,java流计算内部使用了fork-join框架,会对流元素使用并行累积,每个线程处理流中一部分数据,最后对结果进行组合,得出最终

    83710

    Java8学习(4)-Stream流

    集合是一个内存数据结构,它包含数据结构目前所有的--集合每个元素都得先计算出来才能添加到内存里。...这是一种生产者 - 消费者关系。另一个角度来说,流就像一个延迟创建集合:只有在消费者要求时候才会计算。 Stream是内部迭代 一个明显区别是迭代方式不同。...使用流 本文demo源码: https://github.com/Ryan-Miao/someTest/tree/master/src/main/java/com/test/java8/streams...在Java,我们也可以手动实现这个。 ? reduce操作在函数式编程很常见,作用是将一个历史与当前做处理。比如求和,求最大。 求和时候,我们会将每个元素累加给sum。...他们需要操作内部状态还是有些问题。 诸如map和filter等操作会输入流获取每一个元素,并在输出流得到0或1个结果。

    1.7K81

    Java8 Stream groupingBy对List进行分组

    其实Java8 Streams APICollector也支持流数据进行分组和分区操作,本片文章讲简单介绍一下,如何使用groupingBy 和 partitioningBy来对流元素进行分组和分区...Java8StreamgroupingBy分组器,就可以这样操作: /** * 使用java8 stream groupingBy操作,按城市分组list */ @Test public void...-> List /** * 使用java8 stream groupingBy操作,按城市分组list,将List转化为nameList */ @Test public void groupingByCityMapList...List /** * 使用java8 stream groupingBy操作,通过Object对象成员分组List */ @Test public void groupingByObjectTest...比如List存在多个Scene为1,placement也为1元素,目标Mapkey为1value List中就会存在多个1,而实际上我们只需要一个1就能说明placement

    3.8K20

    Java 集合补充

    使用Java8增强Iterator遍历集合元素: Iterator接口主要用于遍历Collection集合元素,Iterator也被称为迭代器。 next()方法返回迭代器刚刚经过元素。...HashSet HashSet是Set接口典型实现,HasHSet按照Hash算法来存储集合元素,因此具有很好存取和查找性能。 特点: 无序。...规则是如果equals()返回true,则hashCode也相等。 hash算法 散列算法(Hash Algorithm),又称哈希算法,杂凑算法,是一种任意文件创造小数字「指纹」方法。...hash算法功能是,保证快速查找被检索对象,hash算法价值在于速度,,当需要查询集合元素时,hash算法可以根据该元素hashCode计算出该元素存储位置,从而快速定位该元素。...因此,当HashSet访问元素时,HashSet先计算该元素hashCode,然后到hashCode对应位置取出该元素,所以速度快。

    1.1K50
    领券