集合元素处理(传统方式和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=张无忌)


    }
}
相关推荐
sg_knight9 天前
Spring Cloud与RabbitMQ深度集成:从入门到生产级实战
java·spring boot·spring·spring cloud·消息队列·rabbitmq·stream
DN金猿11 天前
java8提取list中对象有相同属性值的对象或属性值
java·list·stream·java8
mask哥1 个月前
详解flink性能优化
java·大数据·微服务·性能优化·flink·kafka·stream
中草药z1 个月前
【Stream API】高效简化集合处理
java·前端·javascript·stream·parallelstream·并行流
mask哥2 个月前
详解kafka streams(二)
java·大数据·微服务·flink·kafka·stream·流式操作
上单带刀不带妹2 个月前
Node.js 的流(Stream)是什么?有哪些类型?
node.js·stream·js
ruan1145143 个月前
Java Lambda 类型推断详解:filter() 方法与 Predicate<? super T>
java·开发语言·spring·stream
小雨的光5 个月前
JDK8中的 Stream流式编程用法优化(工具类在文章最后)
java·stream·jdk8
樱阙诗汀6 个月前
Stream流式编程工具类,开发必备
java·stream·流式编程
Klong.k6 个月前
什么是 Stream
java·stream