集合类遍历
List<String> list = new ArrayList<>();
list.foreach(
str ->{
System.out.println(str);
}
)
//相当于
for(String str: list){
System.out.println(str);
}
排序和过滤
//定义一个实体类
public class User{
private String name;
private int age;
}
//过滤年龄小于18岁的用户
List<User> users = new ArrayList<>();
users = users.stream().filter(u-> u.getAge() >= 18).collect(Collectors.toList());
//按照年龄大小降序排序
users = users.stream().sorted(Comparator.comparing(User::getAge).reversed()).collect(Collectors.toList());
stream并行读取文件
case: 将文件内容中所有包含关键词”keyWord”的行,以及关键词所在行下面的count行读到finalRe中。parallel()方法开启多核CPU并行读取,加快文件读取速度。
import java.nio.file.Files;
public List<String> analyseFile(int count, String log, String keyWord){
int finalCount = 0;
List<String> re = new LinkedList<>();
AtomicLong t = new AtomicLong();
AtomicBoolean flag = new AtomicBoolean(false);
List<String> finalRe = new LinkedList<>();
Stream<String> lines = Files.lines(Paths.get(log));
lines.parallel().forEachOrdered(
ele-> {
if (ele.trim().contains(keyWord)) {
finalRe.add(ele);
t.getAndIncrement();
flag.set(true);
}
if (flag.get() && t.get() <= finalCount){
finalRe.add(ele);
t.getAndIncrement();
}
if (flag.get() && t.get() > finalCount){
t.set(0);
flag.set(false);
}
}
);
lines.close();
return finalRe;
}