publicstaticvoidmain(String[] args){ List list = Arrays.asList("apple", "banana", "pear", "orange", "peach", "watermelon"); for (int i = 0; i < list.size(); i++) { if (list.get(i).length() > 5) { System.out.println(list.get(i)); } } }
这段代码非常基础,你也可以使用增强for循环实现这一需求:
publicstaticvoidmain(String[] args){ List list = Arrays.asList("apple", "banana", "pear", "orange", "peach", "watermelon"); for (String str : list) { if (str.length() > 5) { System.out.println(str); } } }
publicstaticvoidmain(String[] args){ List list = Arrays.asList(11, 232, 45, 6346, 14); int max = 0; for (Integer num : list) { if(num > max){ max = num; } } System.out.println(max); }
而如果使用Stream,它将变得非常简单:
publicstaticvoidmain(String[] args){ List list = Arrays.asList(11, 232, 45, 6346, 14); Optional max = list.stream().max(Comparator.naturalOrder()); System.out.println(max.get()); }
求最小值,只需使用min方法即可:
publicstaticvoidmain(String[] args){ List list = Arrays.asList(11, 232, 45, 6346, 14); Optional max = list.stream().min(Comparator.naturalOrder()); System.out.println(max.get()); }
求和:
publicstaticvoidmain(String[] args){ List list = Arrays.asList(11, 232, 45, 6346, 14); Optional sum = list.stream().reduce(Integer::sum); System.out.println(sum.get()); }
注意事项
在使用Strema API时需要注意的地方就是Lambda表达式的编写,如:
List list = wordList.stream().filter(word -> { return word.startsWith("p"); list.forEach(System.out::println);
对于这样的一段程序,因为Lambda表达式体中仅包含了一条返回语句,所以表达式可以简写:
List list = wordList.stream(). filter(word -> word.startsWith("p")).collect(Collectors.toList()); list.forEach(System.out::println);
又比如:
List numList = Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10); Optional sum = numList.stream().reduce((x, y) -> { return x + y; }); System.out.println(sum);
首先因为Lambda表达式体仅包含一条返回语句,所以可以简写:
Optional sum = numList.stream().reduce((x, y) -> x + y);
我们也可以调用Integer类的静态方法sum进行求和:
Optional sum = numList.stream().reduce((x, y) -> Integer.sum(x, y));
又因为Lambda表达式体中仅包含一条语句,且该语句调用了一个绝对存在的方法,则可以简写为:
Optional sum = numList.stream().reduce(Integer::sum);