学习笔记 : JDK 8新特性之Stream流的基本使用案例
题目
现有两个ArrayList
集合分别存储着若干个元素,要求 : 一使用传统的for循环 / 增强for循环依次进行以下若干操作步骤, 二使用Stream流的方式依次进行以下若干操作步骤,相信最后你定会体会到Stream
的美 (✪ω✪)~
- 第一个集合只要包含’E’字符的元素,并将其存储到一个新集合中
- 第一个集合筛选之后只要前3个元素,并将其存储到新集合中
- 第二个集合只要包含’K’字符的元素,并将其存储到新集合中
- 第二个集合筛选之后不要前2两个元素,并将其存储到一个新集合中
- 将两个集合合并成一个集合,并存储到一个新集合中
- 根据合并后的集合中的元素值创建Element对象,并将其存储到新集合中
- 打印整个集合的Element对象信息
解答
传统方式的代码实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94
| package pers.huangyuhui.jdk8.Stream;
import org.junit.Test;
import java.util.ArrayList; import java.util.List;
class Element { private String name;
public Element(String name) { this.name = name; }
@Override public String toString() { return "Element{" + "name='" + name + '\'' + '}'; } }
public class Eaxmple {
@Test public void testExample() { List<String> alist = new ArrayList<>(); alist.add("ABC"); alist.add("BCD"); alist.add("CDE"); alist.add("DEF"); alist.add("EFG"); alist.add("EEE"); List<String> alistA = new ArrayList<>(); for (String s : alist) { if (s.contains("E")) { alistA.add(s); } } List<String> alistB = new ArrayList<>(); for (String s : alistA) { if (alistB.size() != 3) { alistB.add(s); } }
List<String> blist = new ArrayList<>(); blist.add("HIJ"); blist.add("IJK"); blist.add("JKL"); blist.add("KLM"); blist.add("KKK"); List<String> blistA = new ArrayList<>(); for (String s : blist) { if (s.contains("K")) { blistA.add(s); } } List<String> blistB = new ArrayList<>(); for (int i = 2; i < blistA.size(); i++) { blistB.add(blistA.get(i)); }
List<String> abList = new ArrayList<>(); abList.addAll(alistB); abList.addAll(blistB);
List<Element> pList = new ArrayList<>(); for (String s : abList) { pList.add(new Element(s)); }
for (Element element : pList) { System.out.println(element.toString()); } }
}
|
程序运行结果如下 :
1 2 3 4 5
| Person{name='CDE'} Person{name='DEF'} Person{name='EFG'} Person{name='KLM'} Person{name='KKK'}
|
使用Stream流的代码实现
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
| package pers.huangyuhui.jdk8.Stream;
import org.junit.Test;
import java.util.ArrayList; import java.util.List; import java.util.stream.Stream;
class Element { private String value;
public Element(String value) { this.value = value; }
@Override public String toString() { return "Element{" + "value='" + value + '\'' + '}'; } }
public class Example {
@Test public void testWithStream() { List<String> alist = new ArrayList<>(); alist.add("ABC"); alist.add("BCD"); alist.add("CDE"); alist.add("DEF"); alist.add("EFG"); alist.add("EEE");
Stream<String> streamA = alist.stream() .filter(value -> value.contains("E")) .limit(3);
List<String> blist = new ArrayList<>(); blist.add("HIJ"); blist.add("IJK"); blist.add("JKL"); blist.add("KLM"); blist.add("KKK");
Stream<String> streamB = blist.stream() .filter(value -> value.contains("K")) .skip(2);
Stream.concat(streamA, streamB) .map(Element::new) .forEach(System.out::println);
} }
|
程序运行结果如下 :
1 2 3 4 5
| Element{value='CDE'} Element{value='DEF'} Element{value='EFG'} Element{value='KLM'} Element{value='KKK'}
|