一,问题
上文中,大概了解了lambda表达式的书写,然后再这里再看一下stream流的使用。
二,解决方案
package language.stream;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Optional;
import java.util.stream.Stream;
/**
* 学习Java8的Stream流来操作集合或数组
*
* @author KOLO
*
*/
public class StreamMain {
public static void main(String[] args) {
// 获取stream对象
getStreamObject();
// 对stream对象的操作
operateStreamObject();
// 获得stream对象被操作后的结果
getStreamResult();
}
/**
* 获取stream对象
*/
public static void getStreamObject() {
// 通过集合获取stream对象
ArrayList list = new ArrayList();
list.add(1);
list.add(3);
list.add(5);
Stream listStream = list.stream();
Stream listParallelStream = list.parallelStream();
// 通过数组获取stream对象
Integer[] intArr = new Integer[] { 1, 2, 3, 5, 6 };
Stream arrayStream = Arrays.stream(intArr);
// 通过stream的静态of方法创建一个stream流
Stream ofStream = Stream.of(1, 2, 3, 4, 5);
// 通过stream的generate方法获取无限流
Stream limitstrStream = Stream.generate(Math::random).limit(3); // 这里的limit是限制结果的条数
limitstrStream.forEach(System.out::println);
// 通过stream的方法获取流
// 根据开始的数值,自增。自增后的结果放进stream中。最后再遍历
Stream stream3 = Stream.iterate(0, (x) -> x + 2).limit(10);
stream3.forEach(System.out::println);
}
/**
* 操作stream对象:操作主要有筛选与切片、映射和排序。
*/
public static void operateStreamObject() {
List emps = Arrays.asList(new Employee(102, "李四", 59, 6666.66), new Employee(101, "张三", 18, 9999.99),
new Employee(103, "王五", 28, 3333.33), new Employee(104, "赵六", 8, 7777.77),
new Employee(104, "赵六", 8, 7777.77), new Employee(104, "赵六", 8, 7777.77),
new Employee(105, "田七", 38, 5555.55));
emps.parallelStream() // 获取了stream流对象
.filter(e -> e.getWallet() > 1000) // 过滤掉钱包里少于1000的人
.limit(5) // 在所有的结果中选择五个人
.skip(2) // 跳过前面2个人
.forEach(System.out::println); // 遍历输出
List strList = Arrays.asList("aaa", "bbb", "ccc", "ddd", "eee");
// 将strList中每个字符转为大写
strList.stream().map(String::toUpperCase).forEach(System.out::println);
emps.parallelStream().map(Employee::getName).sorted().forEach(System.out::println);
emps.parallelStream().sorted((x, y) -> {
if (x.getAge() == y.getAge()) {
return x.getName().compareTo(y.getName());
} else {
return Integer.compare(x.getAge(), y.getAge());
}
}).forEach(System.out::println);
}
/**
* 获取stream对象被操作后的结果
*/
public static void getStreamResult() {
List emps = Arrays.asList(new Employee(102, "李四", 59, 6666.66), new Employee(101, "张三", 18, 9999.99),
new Employee(103, "王五", 28, 3333.33), new Employee(104, "赵六", 8, 7777.77),
new Employee(104, "赵六", 8, 7777.77), new Employee(104, "赵六", 8, 7777.77),
new Employee(105, "田七", 38, 5555.55));
Optional findFirst = emps.parallelStream()
.map(Employee::getName)
.sorted()
.findFirst();
System.out.println(findFirst.get());
}
}
上述内容参考自:https://blog.csdn.net/J080624/article/details/85060715