首页 > 其他分享 >Stream流之综合练习

Stream流之综合练习

时间:2022-12-10 11:00:23浏览次数:30  
标签:name Stream 流之 练习 collect val public String

package com.Lucky.test;

import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 * 练习1: 数据过滤,定义一个Int类型的集合,过滤掉奇数的数据,只留下偶数
 */
public class test1 {
    public static void main(String[] args) {
        ArrayList<Integer> strInt=new ArrayList<>();
        Collections.addAll(strInt,1,2,3,4,5,6,7,8,9,10,12,15);

        //过滤操作
        List<Integer> collect = strInt.stream().filter(val -> val % 2 == 0)
                                .collect(Collectors.toList());

        //遍历数据
        Iterator<Integer> iterator = collect.iterator();
        while (iterator.hasNext()){
            System.out.print(iterator.next()+"\t");
        }

    }
}

  

package com.Lucky.test;

import java.util.*;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 * 练习2: 创建一个ArrayList集合,添加字符串,格式是 "唯易,22"
 *        要求:保留年龄大于或等于25的人,将结果保存到Map集合中【姓名作为键,年龄作为值】
 */
public class test2 {
    public static void main(String[] args) {
        ArrayList<String> strList=new ArrayList<>();
        Collections.addAll(strList,"唯易,22","欣怡,26","维嘉,32","未央,25","Bug,42");

        //过滤操作
        Map<String, Integer> collect = strList.stream()
                .filter(val -> Integer.parseInt(val.split(",")[1]) >= 25)
                .collect(Collectors.toMap(k -> k.split(",")[0],
                                          v -> Integer.parseInt(v.split(",")[1])));
        System.out.println(collect);

        //遍历数据
        //①keySet
        Set<String> strings = collect.keySet();
        Iterator<String> iterator = strings.iterator();
        while (iterator.hasNext()){
            String name=iterator.next();
            int val=collect.get(name);
            System.out.println(name+":"+val);
        }

        ///②entrySet
        Set<Map.Entry<String, Integer>> entries = collect.entrySet();
        Iterator<Map.Entry<String, Integer>> iter = entries.iterator();
        while (iter.hasNext()){
            System.out.print(iter.next()+"\t");
        }

    }
}

  练习3材料:

package com.Lucky.test;

public class Actor {
private String name;
private int age;

public Actor() {
}

public Actor(String name, int age) {
this.name = name;
this.age = age;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

@Override
public String toString() {
return "Actor{" +
"name='" + name + '\'' +
", age=" + age +
'}';
}
}




package com.Lucky.test;

import java.util.*;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
 * 练习3:
 * 现在有两个ArrayList集合,
 * 第一个集合中:存储6名男演员的名字和年龄。
 * 第二个集合中:存储6名女演员的名字和年龄。
 * 姓名和年龄中间用逗号隔开。比如:张三,23
 * 要求完成如下的操作:1,男演员只要名字为3个字的前两人
 *                2,女演员只要姓杨的,并且不要第一个
 *                3,把过滤后的男演员姓名和女演员姓名合并到一起
 *                4,将上一步的演员信息封装成Actor对象。
 *                5,将所有的演员对象都保存到List集合中。
 *                备注:演员类Actor,属性有:name,age
 */
public class test3 {
    public static void main(String[] args) {
        ArrayList<String> ListOne=new ArrayList<>();
        Collections.addAll(ListOne,"唯易人生,22","李四时,26","王五嚓,32","陈六狗,25","Bug,42","张三炮,23");
        ArrayList<String> ListTwo=new ArrayList<>();
        Collections.addAll(ListTwo,"小丽,22","杨欣怡,26","维嘉,32","杨未央,25","小欣,42","杨薇薇,23");
        //过滤操作
        Stream<String> one = ListOne.stream().filter(name -> name.split(",")[0].length() == 3).limit(2);
        Stream<String> two = ListTwo.stream().filter(name -> name.split(",")[0].startsWith("杨")).skip(1);


        System.out.println("---------初级做法-------------");
//        Stream<Actor> actorStream = Stream.concat(two, one)
//                .map(new Function<String, Actor>() {
//            @Override
//            public Actor apply(String o) {
//                String str = o.split(",")[0];
//                int val = Integer.parseInt(o.split(",")[1]);
//
//                return new Actor(str, val);
//            }
//        });
//        List<Actor> collect = actorStream.collect(Collectors.toList());
//        System.out.println(collect);

        System.out.println("---------lamda表达式做法-------------");
        Stream<Actor> Stream1 = Stream.concat(one, two).map(val -> new Actor(val.split(",")[0],
                Integer.parseInt(val.split(",")[1])));
        List<Actor> lamdaCollect = Stream1.collect(Collectors.toList());
        System.out.println(lamdaCollect);
    }
}

标签:name,Stream,流之,练习,collect,val,public,String
From: https://www.cnblogs.com/Lucky-only/p/16971021.html

相关文章

  • Stream【数据流】的基本使用
    Stream:数据流中间方法:filter【过滤】limit【获取前几个数据】skip【跳过前几个数据】distinct【去重】concat【合并】map【......
  • io流之转换流
    先知:JavaIO流中提供了两种用于将字节流转换为字符流的转换流。其中InputStreamReader用于将字节输入流转换为字符输入流,其中OutputStreamWriter用于将字节输出流转换......
  • io流之序列化与反序列化流
    packagecom.Lucky.io.serializeOrUnserialize;importjava.io.*;/*序列化流:将java对象写到本地文件中【应用场景:游戏存档……………………】反序列化流:......
  • io流之【字节/字符缓冲流】
    缓冲流,也叫高效流,是对4个基本的Filexxx流的增强,所以也是4个流,按照数据类型分类:字节缓冲流:BufferedInputStream,BufferedOutputStream字符缓冲流:BufferedReader,Buffered......
  • io流之字节流【基础流】
    ①字节输入流:读取文件中的数据packagecom.Lucky.io.byteStream;importjava.io.FileInputStream;importjava.io.FileNotFoundException;importjava.io.IOExceptio......
  • io流之字符流【基础流】
    相对于字节流来说,字符流本身就存在:缓冲区先解:缓冲区:reader-->sd-->bb作用:缓冲区位于内存当中,大大的提高了数据的读写效率!!!! ......
  • 多线程练习
    Map<String,Integer>totalStock=newHashMap<>();AtomicIntegertotal=newAtomicInteger();privateList<Car>carList=newArrayList<>();publ......
  • Qt: QXmlStreamWriter Class写XML文件
    需求:使用QXMLStreamWriter,将如下界面的结构写入XML文件。效果:思路:1、先构造树形控件treeWidget.2、使用QXMLStreamWriter,写XML文件。源码:#include<QApplication>#include<......
  • Qt:QXMLStreamReader、QXMLStreamWriter,读写XML文件实例
    1、​​ Qt:QXMLStreamReader,读XML文件实例​​2、​​Qt:QXmlStreamWriterClass写XML文件​​效果图:需求:打开对应格式的XML文件,读入到QTreewidget树中,并能将XML文......
  • Qt: QXMLStreamReader,读XML文件实例
    主要接口:1、​​T​​okenTypeQXmlStreamReader::readNext()功能:读取下一个标记,并返回其类型。主要的类型有:enumQXmlStreamReader::TokenTypeThisenumspecifiesthetyp......