刚开始用java8的时候,很多都是替代for循环,因为java8推出了强大的流stream,关于流的用法很多,百度一下就可以搜到语法之类,所以这里我只想举一些简单替代for的例子,含义那些就自己去查吧。
好了,让我们开始吧。男人类有很多卡类,先初始化一些数据。
List<Man> mans = new ArrayList<>();
mans.add(new Man("001","张三",Arrays.asList(new Card("工商银行","9558800001"),new Card("工商银行","9558800002"),new Card("建设银行","6227001234"))));
mans.add(new Man("002","李四",Arrays.asList(new Card("招商银行","6225800002"),new Card("建设银行","6227035248"))));
mans.add(new Man("003","王五",Arrays.asList(new Card("建设银行","6227056547"),new Card("中国银行","6013832547"),new Card("民生银行","4074058542"))));
mans.add(new Man("004","赵六",Arrays.asList(new Card("工商银行","9558832458"),new Card("工商银行","9558832547"),new Card("建设银行","6227032578"))));
mans.add(new Man("005","孙七",Arrays.asList(new Card("中国银行","6013825847"),new Card("农业银行","6228836547"),new Card("招商银行","6225014582"))));
mans.add(new Man("006","张三",Arrays.asList(new Card("工商银行","9558832587"),new Card("交通银行","6222814578"),new Card("工商银行","9558865427"))));
1,查找张三的男人,for是这样的,
public List<Man> getByName(List<Man> mans){
List<Man> temp = new ArrayList<>();
for(Man man : mans){
if("张三".equals(man.getName())){
temp.add(man);
}
}
return temp;
}
改进后为:
public List<Man> getByName8(List<Man> mans) {
return mans.stream().filter(m -> "张三".equals(m.getName())).collect(Collectors.toList());
}
这里的集合相当与数据库的表,而filter相当于数据库的where。
2,继续,查找id为007的男人,id唯一,for是这样的
public Man getById(List<Man> mans) {
for (Man man : mans) {
if ("007".equals(man.getId())) {
return man;
}
}
return null;
}
改进后为:
public Man getById8(List<Man> mans) {
return mans.stream().filter(m -> "oo7".equals(m.getId())).findFirst().orElse(null);
}
3,继续,获取名字叫张三(因有同名)的所有银行卡,这里不讨论实际业务意义,只讲技术,哈哈,用for是这样的。
public List<Card> getAllCardByName(List<Man> mans) {
List<Card> cards = new ArrayList<>();
for (Man man : mans) {
if ("张三".equals(man.getName())) {
cards.addAll(man.getCards());
}
}
return cards;
}
改进后是这样的
public List<Card> getAllCardByName8(List<Man> mans) {
return mans.stream().filter(m -> "张三".equals(m.getName())).flatMap(m -> m.getCards().stream())
.collect(Collectors.toList());
}
4,继续,在3的条件上加个工商银行条件,for
public List<Card> getSomeCardByName(List<Man> mans) {
List<Card> cards = new ArrayList<>();
for (Man man : mans) {
if ("张三".equals(man.getName())) {
for (Card card : man.getCards()) {
if ("工商银行".equals(card.getName())) {
cards.add(card);
}
}
}
}
return cards;
}
改进后是这样的
public List<Card> getSomeCardByName8(List<Man> mans) {
return mans.stream().filter(m -> "张三".equals(m.getName())).flatMap(m -> m.getCards().stream())
.filter(c -> "工商银行".equals(c.getName())).collect(Collectors.toList());
}
5,把张三的名字修改为新张三,for,注意会改变源数据
public List<Man> changeName(List<Man> mans) {
for (Man man : mans) {
if ("张三".equals(man.getName())) {
man.setName("新张三");
}
}
return mans;
}
改进:
public List<Man> changeName8(List<Man> mans) {
return mans.stream().peek(m -> {
if ("张三".equals(m.getName()))
m.setName("新张三");
}).collect(Collectors.toList());
}
先这样。
本文通过具体案例展示了如何使用Java8的Stream API简化常见操作,如筛选特定姓名的用户、获取指定用户的银行卡信息等,并对比了使用Stream API前后代码的变化。
 --流,不要再用for循环了&spm=1001.2101.3001.5002&articleId=52634970&d=1&t=3&u=db76c4fda0764e60867890932d5e0671)
4406

被折叠的 条评论
为什么被折叠?



