国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

stream流的使用-獲取list集合中對(duì)象的單個(gè)字段list集合,進(jìn)行累加操作

這篇具有很好參考價(jià)值的文章主要介紹了stream流的使用-獲取list集合中對(duì)象的單個(gè)字段list集合,進(jìn)行累加操作。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

Stream流的使用

場(chǎng)景及代碼案例源于實(shí)際項(xiàng)目

1. 需求描述

現(xiàn)存一list集合,其中保存了投資人的信息。
Person (name, age, money rateOfReturn)
其中的money表示投資人現(xiàn)有資產(chǎn),rateOfReturn表示投資年回報(bào)率
需求:
1.計(jì)算投資人年齡之和;
2.根據(jù)現(xiàn)有資產(chǎn)及投資回報(bào)率,計(jì)算所有投資人一年后的資產(chǎn)總和;

2. 代碼

實(shí)體類

package com.drc.java8.stream.practice.domain;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;
import java.math.BigDecimal;

/**
 * @author dairuichuang
 */
@Data
@AllArgsConstructor
@NoArgsConstructor
public class Person {
    private String name;
    private Integer age;
    private BigDecimal money;
    private BigDecimal rateOfReturn;
}

主程序

package com.drc.java8.stream.practice;

import com.drc.java8.stream.practice.domain.Person2;
import org.junit.Test;

import java.math.BigDecimal;
import java.util.ArrayList;
import java.util.List;

public class ListPersonPractice {
	// 投資人集合
    List<Person> PersonList = new ArrayList<>();
    // 初始化投資人
    {
        PersonList.add(new Person2("張三", 11, BigDecimal.valueOf(10000), BigDecimal.valueOf(0.08)));
        PersonList.add(new Person2("李四", 21, BigDecimal.valueOf(20000), BigDecimal.valueOf(0.18)));
        PersonList.add(new Person2("王五", 31, BigDecimal.valueOf(30000), BigDecimal.valueOf(0.28)));
        PersonList.add(new Person2("趙四", 41, BigDecimal.valueOf(40000), BigDecimal.valueOf(0.38)));
    }
    /**
    *  計(jì)算
    */
    @Test
    public void testCalcAgeAndMoney() {
        // 計(jì)算年齡之和
        Integer ages = PersonList.stream().map(Person::getAge).reduce((a, b) -> (a + b)).get();
        System.out.println(ages);
        
        // money是資產(chǎn),rateOfReturn 是資產(chǎn)年收益率,計(jì)算一年后幾人的資產(chǎn)總額
        BigDecimal assetsAmt = PersonList.stream().map(person ->
                person.getMoney().multiply(person.getRateOfReturn().add(BigDecimal.ONE))).reduce(BigDecimal::add).get();
        System.out.println(assetsAmt);
    }
}

3. 涉及方法

stream()

/*
* 返回以此集合為源的順序流。
* 當(dāng)spliterator()方法不能返回IMMUTABLE、CONCURRENT或后期綁定的分裂器時(shí),應(yīng)該重寫(xiě)此方法。(詳見(jiàn)spliterator())
*/
default Stream<E> stream() {
        return StreamSupport.stream(spliterator(), false);
    }

stream是Collection的一個(gè)默認(rèn)方法,它的作用是返回集合的stream流
用法:

List<String> list = new ArrayList<>();
Stream<String> stream = list.stream();

map(Function<? super T, ? extends R> mapper)

// 返回一個(gè)流,由將給定函數(shù)應(yīng)用于此流的元素的結(jié)果組成。
<R> Stream<R> map(Function<? super T, ? extends R> mapper);

Stream的方法,作用是返回一個(gè)流,里面的數(shù)據(jù)使我們定義的,比如:

stream.map(Person::getAge);

其中 Person::getAge定義的就是“年齡”,map方法會(huì)為我們返回一個(gè)僅包含“年齡”的stream
我們可以接著調(diào)用collect方法,獲取到一個(gè)list集合。

List<Integer> ageList = stream.map(Person::getAge).collect(Collectors.toList());

reduce

// 使用關(guān)聯(lián)累加函數(shù)對(duì)此流的元素執(zhí)行縮減,并返回描述縮減值(如果有的話)的Optional。
Optional<T> reduce(BinaryOperator<T> accumulator);

其中的參數(shù)表示對(duì)兩個(gè)相同類型的操作數(shù)的操作,產(chǎn)生與操作數(shù)相同類型的結(jié)果。這是BiFunction的專門化,用于操作數(shù)和結(jié)果都是同一類型的情況。其中的參數(shù):

@FunctionalInterface
public interface BinaryOperator<T> extends BiFunction<T,T,T>

簡(jiǎn)單來(lái)說(shuō),reduce方法就是將stream流中的多個(gè)元素縮減為一個(gè)我們想要的結(jié)果??s減的規(guī)則,就是我們傳入的表達(dá)式 ,比如

PersonList.stream().map(Person::getAge).reduce((a, b) -> (a + b)).get();

(a,b) -> (a + b) 表示將流中的元素進(jìn)行累加操作,并返回包含累加結(jié)果的Option,而get()方法,則是獲取Option中的累加結(jié)果。

通過(guò)一系列的操作,便獲得了集合中投資人年齡之和。Stream流還有很多其他的用法有待學(xué)習(xí),用的熟練了,確實(shí)可以提升不少效率,并且對(duì)于一些疑難的問(wèn)題它都可以很好的解決。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-421207.html

到了這里,關(guān)于stream流的使用-獲取list集合中對(duì)象的單個(gè)字段list集合,進(jìn)行累加操作的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • Java8特性,Stream流的使用,收集成為map集合

    Java 8引入了Stream API,這是Java集合操作的一個(gè)重大改進(jìn)。Stream API提供了一種高效且易于使用的處理數(shù)據(jù)的方式。 Stream是數(shù)據(jù)渠道,用于操作數(shù)據(jù)源(集合、數(shù)組等)所生成的元素序列。注意:Stream自己不會(huì)存儲(chǔ)元素,它不會(huì)改變?cè)磳?duì)象,反而它的操作會(huì)返回一個(gè)全新的Strea

    2024年04月22日
    瀏覽(100)
  • Java中List對(duì)象集合按照對(duì)象中某字段進(jìn)行排序

    在Java中,可以使用List集合對(duì)象的sort(Comparator? super E c)方法,按照對(duì)象中某字段對(duì)List集合進(jìn)行排序 栗子: 打印輸出結(jié)果如下:

    2024年02月12日
    瀏覽(20)
  • Java8 stream、List forEach 遍歷對(duì)象 List 對(duì)某一字段重新賦值

    Java8 stream、List forEach 遍歷對(duì)象 List 對(duì)某一字段重新賦值 經(jīng)常會(huì)需要遍歷對(duì)象 List 對(duì)某一字段重新賦值,使用 Java8 stream 或者 List forEach 操作實(shí)現(xiàn)非常便捷。 一、Java8 stream 操作 示例代碼如下: 二、List forEach 操作 示例代碼如下: 將 Object 替換為需要提取的對(duì)象即可。 遍歷對(duì)象

    2024年02月16日
    瀏覽(24)
  • java 對(duì)List集合中元素對(duì)象按字段分組,并收集指定字段的值

    java 對(duì)List集合中元素對(duì)象按字段分組,并收集指定字段的值

    一、實(shí)現(xiàn):對(duì)已有對(duì)象集合ListPersion ,需要獲取Persion對(duì)象的字段 name分組, 并對(duì)年齡age字段值做收集 二、字段分組收集方法 ?注:由于實(shí)際業(yè)務(wù)只有String類型跟數(shù)字類型,所以只對(duì)String跟Object兩種類型判空 三、測(cè)試代碼 四、結(jié)果

    2024年02月15日
    瀏覽(19)
  • Stream流實(shí)踐(二):list 對(duì)象數(shù)組根據(jù)某字段去重的三種基本思路

    相信大家對(duì)于list簡(jiǎn)單數(shù)組的去重很熟悉了,例如以下代碼 那我們來(lái)探討下,對(duì)于list中保存為對(duì)象的數(shù)組,根據(jù)內(nèi)部對(duì)象的 某一個(gè)字段 去重有什么好的思路呢? 給出一個(gè)簡(jiǎn)單的Student對(duì)象 大家學(xué)廢了嗎?

    2024年02月16日
    瀏覽(370)
  • Java中用Stream流對(duì)List對(duì)象集合轉(zhuǎn)Map時(shí)key值重復(fù)的操作

    看完你還不懂,你直接噴·· 定義: 1.List是一個(gè)裝Dto對(duì)象的集合 2.Dto里面有ID屬性,name屬性等等 3.Dto里面的ID會(huì)重復(fù) ?現(xiàn)在要把List轉(zhuǎn)成以ID為key值的map,明顯key不能重復(fù)啊,所以應(yīng)該怎么操作呢? (需要你有java8Stream流的基本概念,map的基本概念) ? 操作1:重復(fù)key,選擇保留

    2024年01月18日
    瀏覽(91)
  • stream(流) 獲取list里面對(duì)象的某個(gè)值的列表

    — 獲取userList里面的name值組成列表 User.java mian 結(jié)果

    2024年02月17日
    瀏覽(24)
  • JAVA中對(duì)list使用stream對(duì)某個(gè)字段求和

    對(duì)于List對(duì)象 或者ListMapString,integer等類型的數(shù)組,如何快速的求出list數(shù)組中某個(gè)對(duì)象的某個(gè)屬性的和,平均數(shù),統(tǒng)計(jì)數(shù),最大值,最小值,等: 使用 XXXSummaryStatistics統(tǒng)計(jì)類實(shí)現(xiàn): 運(yùn)行結(jié)果如下: 相應(yīng)的還有DoubleSummaryStatistics, LongSummaryStatistics

    2024年02月14日
    瀏覽(95)
  • java 8 stream流的19種用法,可應(yīng)對(duì)大多數(shù)集合的處理場(chǎng)景

    java 8的Stream API是一種非常強(qiáng)大的集合處理工具,它提供了一種新的、高效的、聲明式的方式來(lái)處理集合數(shù)據(jù)。下面我們就來(lái)看一下Java 8 Stream API的所有用法。 可以使用Stream.of()方法創(chuàng)建一個(gè)Stream: 也可以使用集合的stream()方法創(chuàng)建一個(gè)Stream: 可以使用filter()方法過(guò)濾Stream中的

    2023年04月08日
    瀏覽(26)
  • java通過(guò)stream流的形式把列表中某個(gè)字段的值取出并生成列表

    可以使用Java 8中引入的Stream API來(lái)實(shí)現(xiàn)這一功能。例如,假設(shè)你有一個(gè)類名為Person的列表,并且你想要從這個(gè)列表中提取所有人的姓名并生成一個(gè)新的列表。你可以這樣做: 這段代碼首先使用 stream() 方法將列表轉(zhuǎn)換為流。然后,使用 map() 方法對(duì)流中的每個(gè)元素執(zhí)行一個(gè)轉(zhuǎn)換函

    2024年02月12日
    瀏覽(24)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包