当我们使用list.stream.filter时有多个条件过滤时
我们可以利用and或者or进行层级过滤
list.stream().filter(predicate1.and(predicate2)).collect(Collectors.toList());
lambda表达式讲解:
举个例子
public class Text { public static void main(String[] args) { Thread thread = new Thread(new Runnable() { @Override public void run() { System.out.println("lambda"); } }); thread.start(); } } 当我们用匿名内部类的方法写一个东西最核心的东西是什么,是我们的输出语句 lambda
函数式编程:我们只需要把方法的实现传过来就可以了
只需要一行一个线程就启动了
new Thread(()->{ System.out.println("lambda"); } ) .start();
接下来我们看stream流各种各样的方法
filter过滤
List<String> strings = Arrays.asList("哈哈哈", "hshashksj", "是计算机计算机");
//这的s相当于每一个字符串对象 1.List<String> collect1 = strings.stream().filter(s -> s.length() > 3).collect(Collectors.toList()); System.out.println(collect1); 输出[hshashksj, 是计算机计算机] 对象形式 //forEach 进行一个循环 2. strings.stream().filter(s -> s.length() > 3).forEach(s-> System.out.println(s)); hshashksj 是计算机计算机
limit截取
strings.stream().limit(2).forEach(a-> System.out.println(a)); List<String> collect2 = strings.stream().limit(2).collect(Collectors.toList());
sorted排序 升序
List<Integer> integers = Arrays.asList(1, 56, 99, 111, 333); List<Integer> collect3 = integers.stream().sorted().collect(Collectors.toList()); System.out.println(collect3);
降序
List<Integer> collect3 = integers.stream().sorted(Comparator.reverseOrder()).collect(Collectors.toList()); System.out.println(collect3);
//求最大值 Integer integer = integers.stream().max(Integer::compareTo).get(); System.out.println(integer); //最小值 Integer integer1 = integers.stream().min(Integer::compareTo).get(); System.out.println(integer1); //数量 long count = integers.stream().count(); System.out.println(count);
//对集合中的元素进行特定的操作
比方说对集合中的元素都进行一个加10
map
integers.stream().map(integer2 -> integer2+10).forEach(string-> System.out.println(string));
reduce将所有的元素合并成一个值 比如返回元素中的所有值之和
Integer integer2 = integers.stream().reduce((sum, num) -> sum + num).get(); System.out.println(integer2);所有元素之和
collection把元素筛选出来生成一个新的集合