1、集合元素处理(传统方式)
- 现在有两个ArrayList集合存储队伍当中的多个成员姓名,要求使用传统的for循环(或增强for循环)依次进行一下若干操作步骤:
- 第一个队伍只要 名字为 3 个字 的成员姓名;存储到一个新集合中。
- 第一个队伍筛选之后只要 前 3 个人;存储到一个新集合中。
- 第二个队伍只要姓 张 的成员姓名;存储到一个新集合中。
- 第二个队伍筛选之后 不要前 2 个人;存储到一个新集合中。
- 将两个队伍 合并 为一个队伍;存储到一个新集合中。
- 根据姓名创建Person对象;存储到一个新集合中。
- 打印整个队伍的Person对象信息。
javapackage 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方式)
javapackage 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表达式和方法引用完成代码
javapackage 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=张无忌) } }