JAVA Stream流

Example:

有一个集合里面存放的字符串,样子如:“赵丽颖,91”、“鹿晗,98”、“王宝强,87”…
要求打印输出所有成绩当中大于90分的数字。

1.首先定义一个集合ArrayList,存入指定格式的若干字符串。
2.我们想要逗号后面的,就要分割字符串:split,然后取用结果数组当中的1号元素。
3.根据字符串切割出来的“98”仍是一个String,需要转换成int才能比较大小:Integer.parseInt静态方法
4.要判断一下转换之后的int是不是大于90,进行筛选。
5.对筛选之后的最终结果进行打印输出。

冗余的for循环:

public class ArrayList {
	public static void main(String[] args) {
		// 首先创建一个集合,然后放入指定字符串
		ArrayList<String> ar1 = new ArrayList<>();
		ar1.add("赵丽颖,91");
		ar1.add("鹿晗,98");
		ar1.add("王宝强,87");
		System.out.println(ar1);

		// 分割每个字符串,只要逗号后面的
		ArrayList<String> scoreList = new ArrayList<>(); // 保存分数字符串
		for (int i = 0; i < ar1.size(); i++) {
			String str = ar1.get(i);// 当前字符串,"赵丽颖,91"
			String[] array = str.split(",");
			String score = array[1]; // "98"
			scoreList.add(score);
		}

		// 将字符串“98”等等转换成int数字98
		ArrayList<Integer> numList = new ArrayList<>();//保存的数字是:91,98,97
		for (int i = 0; i < scoreList.size(); i++) {
			int score = Integer.parseInt(scoreList.get(i));
			numList.add(score); 
		}
		
		//过滤,只要大于90的,不要低于90的
		ArrayList<Integer> ResultList = new ArrayList<>();
		for(int i = 0;i<numList.size();i++) {
			int num = numList.get(i);
			if(num>=90) {
				ResultList.add(num);
			}
		}
		//打印输出
		System.out.println(ResultList); //[91, 98]
	}
}

使用Stream流:

public class ArrayListStream {
	public static void main(String[] args) {
		// 首先创建一个集合,然后放入指定字符串
		ArrayList<String> ar1 = new ArrayList<>();
		ar1.add("赵丽颖,91");
		ar1.add("鹿晗,98");
		ar1.add("王宝强,87");

		// Stream API更优写法
		ar1.stream().map(s -> s.split(",")[1]).map(Integer::parseInt)
			.filter(n -> n > 90).forEach(System.out::println);

	}
}

这里的Stream流:

ar1.stream().map(s -> s.split(",")[1]).map(Integer::parseInt)
			.filter(n -> n > 90).forEach(System.out::println);
ar1.stream() //集合拿到一个流stream
.map(s -> s.split(",")[1])  
//map映射,把"赵丽颖,91" 变成 "91"
// [1] 代表取数组下标位置1

等价于:

.map((String str) ->{
			String[] array = str.split(",");
			String result = array[1];
			return result;
		});
.map(Integer::parseInt)
//map映射,把"91",String变成int

方法引用,等价于

.map((String str) -> {
			int num = Integer.parseInt(str);
			return num;
		});
filter(n -> n > 90)
//filter过滤大于90
forEach(System.out::println);
//forEach每一个字符打印
发布了98 篇原创文章 · 获赞 8 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_43472877/article/details/104162122