刚开始用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());
}
继续阅读与本文标签相同的文章
python英汉词典
FF回应贾跃亭申请破产前买2千万豪宅:纯属谣言
-
能力小访谈| 支付宝开放能力全方位助力白鲸鱼营销与内容安全
2026-05-18栏目: 教程
-
听众提建议,鼎城区城管局马上改
2026-05-18栏目: 教程
-
PARTsolutions让旺众/Wanzl的新设计缩短了2个多小时
2026-05-18栏目: 教程
-
第六届世界互联网大会将推出5G自动公交线路
2026-05-18栏目: 教程
-
市科技局加快黄石双创战略团队培育
2026-05-18栏目: 教程
