集合元素处理(传统方式和Stream方式)

1、集合元素处理(传统方式)

  • 现在有两个ArrayList集合存储队伍当中的多个成员姓名,要求使用传统的for循环(或增强for循环)依次进行一下若干操作步骤:
  1. 第一个队伍只要 名字为 3 个字 的成员姓名;存储到一个新集合中。
  2. 第一个队伍筛选之后只要 前 3 个人;存储到一个新集合中。
  3. 第二个队伍只要姓 张 的成员姓名;存储到一个新集合中。
  4. 第二个队伍筛选之后 不要前 2 个人;存储到一个新集合中。
  5. 将两个队伍 合并 为一个队伍;存储到一个新集合中。
  6. 根据姓名创建Person对象;存储到一个新集合中。
  7. 打印整个队伍的Person对象信息。
java 复制代码
package com.csdn.streampractice;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import java.util.ArrayList;
import java.util.Collections;
public class Traditional {
    public static void main(String[] args) {
        //第一支队伍
        ArrayList<String> one = new ArrayList<>();
        Collections.addAll(one, "喜羊羊", "美羊羊", "懒洋洋", "灰太狼", "红太狼", "村长");

        //1.第一个队伍只要 名字为 3 个字 的成员姓名;存储到一个新集合中。
        ArrayList<String> one1 = new ArrayList<>();
        for (String name : one) {
            if (name.length()==3) {
                one1.add(name);
            }
        }
        //2.第一个队伍筛选之后只要 前 3 个人;存储到一个新集合中。
        ArrayList<String> one2 = new ArrayList<>();
        for (int i = 0; i < 3; i++) {
            one2.add(one1.get(i));
        }

        //第二支队伍
        ArrayList<String> two = new ArrayList<>();
        Collections.addAll(two, "张三丰", "张翠山", "张无忌", "赵敏", "周芷若");

        //3.第二个队伍只要姓 张 的成员姓名;存储到一个新集合中。
        ArrayList<String> two1 = new ArrayList<>();
        for (String name : two) {
            if (name.startsWith("张")) {
                two1.add(name);
            }
        }
        
        //4.第二个队伍筛选之后 不要前 2 个人;存储到一个新集合中。
        ArrayList<String> two2 = new ArrayList<>();
        for (int i = 2; i <two1.size() ; i++) {
            two2.add(two1.get(i));
        }

        //5.将两个队伍 合并 为一个队伍;存储到一个新集合中。
        ArrayList<String> concatenate = new ArrayList<>();
        concatenate.addAll(one2);
        concatenate.addAll(two2);

        //6.根据姓名创建Person对象;存储到一个新集合中。
        ArrayList<Person> list = new ArrayList<>();
        for (String name : concatenate) {
            list.add(new Person(name));
        }

        //7.打印整个队伍的Person对象信息。
        for (Person person : list) {
            System.out.println(person);
        }

//        Person(name=喜羊羊)
//        Person(name=美羊羊)
//        Person(name=懒洋洋)
//        Person(name=张无忌)
    }
}
@Data
@NoArgsConstructor
@AllArgsConstructor
class Person {
    private String name;
}

2、集合元素处理(Stream方式)

java 复制代码
package com.csdn.streampractice;
import java.util.ArrayList;
import java.util.Collections;
import java.util.stream.Stream;
public class DemoStreamNames {
    public static void main(String[] args) {

        //第一支队伍
        ArrayList<String> one = new ArrayList<>();
        Collections.addAll(one, "喜羊羊", "美羊羊", "懒洋洋", "灰太狼", "红太狼", "村长");

        //1.第一个队伍只要 名字为 3 个字 的成员姓名;存储到一个新集合中。
        Stream<String> stream = one.stream();
        Stream<String> stringStream = stream.filter(name -> name.length() == 3);
        //2.第一个队伍筛选之后只要 前 3 个人;存储到一个新集合中。
        Stream<String> limit = stringStream.limit(3);

        
        //第二支队伍
        ArrayList<String> two = new ArrayList<>();
        Collections.addAll(two, "张三丰", "张翠山", "张无忌", "赵敏", "周芷若");

        //3.第二个队伍只要姓 张 的成员姓名;存储到一个新集合中。
        Stream<String> stream1 = two.stream();
        Stream<String> stringStream1 = stream1.filter(name -> name.startsWith("张"));
        //4.第二个队伍筛选之后 不要前 2 个人;存储到一个新集合中。
        Stream<String> skip = stringStream1.skip(2);
        //5.将两个队伍 合并 为一个队伍;存储到一个新集合中。
        Stream<String> concat = Stream.concat(limit, skip);

        //6.根据姓名创建Person对象;存储到一个新集合中。
        Stream<Person> personStream = concat.map(name -> new Person(name));

        //7.打印整个队伍的Person对象信息。
        personStream.forEach(System.out::println);

//        Person(name=喜羊羊)
//        Person(name=美羊羊)
//        Person(name=懒洋洋)
//        Person(name=张无忌)
    }
}
  • 完全使用链式编程,lambda表达式和方法引用完成代码
java 复制代码
package com.csdn.streampractice;
import java.util.ArrayList;
import java.util.Collections;
import java.util.stream.Stream;
public class StreamUltimate {
    public static void main(String[] args) {

        ArrayList<String> one = new ArrayList<>();
        Collections.addAll(one, "喜羊羊", "美羊羊", "懒洋洋", "灰太狼", "红太狼", "村长");

        Stream<String> limit = one.stream().filter(name -> name.length() == 3).limit(3);


        ArrayList<String> two = new ArrayList<>();
        Collections.addAll(two, "张三丰", "张翠山", "张无忌", "赵敏", "周芷若");

        Stream<String> skip = two.stream().filter(name -> name.startsWith("张")).skip(2);

        Stream.concat(limit, skip).map(Person::new).forEach(System.out::println);

//        Person(name=喜羊羊)
//        Person(name=美羊羊)
//        Person(name=懒洋洋)
//        Person(name=张无忌)


    }
}
相关推荐
萧曵 丶17 小时前
Java Stream 实际用法详解
java·stream·lambda
10km5 天前
java: HashMap.merge 的 Null 值陷阱:为什么 Stream API 会抛出 NPE
java·stream·hashmap·merge
云雾J视界16 天前
多Stream并发实战:用流水线技术将AIGC服务P99延迟压降63%
aigc·api·cpu·stream·gpu·cuda·多并发
颜颜yan_20 天前
基于CANN多Stream异步执行的智能推理管道:突破传统串行瓶颈
运维·架构·stream·昇腾·cann
彩虹、1 个月前
数据处理常用到的一些Java 8中Stream操作
stream·java 8
程序员三明治2 个月前
选 Redis Stream 还是传统 MQ?队列选型全攻略(适用场景、优缺点与实践建议)
java·redis·后端·缓存·rocketmq·stream·队列
花伤情犹在2 个月前
Java Stream 高级应用:优雅地扁平化(FlatMap)递归树形结构数据
java·stream·function·flatmap
sg_knight2 个月前
Spring Cloud与RabbitMQ深度集成:从入门到生产级实战
java·spring boot·spring·spring cloud·消息队列·rabbitmq·stream
DN金猿2 个月前
java8提取list中对象有相同属性值的对象或属性值
java·list·stream·java8
mask哥3 个月前
详解flink性能优化
java·大数据·微服务·性能优化·flink·kafka·stream