开心一笑
【什么是代沟?
就是当你换上新衣服,在老妈面前走了一圈说:
妈,有范吗?
老妈看了你一眼说:
有,在锅里,自己盛……】
提出问题
项目常用Lambda表达式有哪些???
解决问题
男孩(Boy)和女孩(Girl)虽然认识很久,但在一起的时间却很短很短,因为异地的原因。两人能够一直保持联系的就是手机(BoyMobile)了。女孩曾经说过:“手机(GirlMobile)坏了,没有手机,很没安全感”。其实男孩也一样。
女孩很忙,从男孩认识女孩开始就这样,男孩每天都很想给女孩打电话,发短信,发微信,聊QQ,可是每次想到女孩很忙,就忧虑了。男孩害怕,害怕女孩在忙,打搅到她,更害怕女孩故意的不理睬,事实上男孩也很忙......
这天晚上,男孩下班回来,去了魔法杂货店买了通讯录(AddressBook),这里面有他认识的所有人的电话号码,包含和男孩的关系。
/**
* 描述:通讯录
* @author ay
*/
class AddressBook extends Object{
AddressBook(){}
AddressBook(String name,String relationShip,String phoneNumber){
this.relationShip = relationShip;
this.phoneNumber = phoneNumber;
this.setName(name);
}
/** 关系 **/
private String relationShip;
/** 电话号码 **/
private String phoneNumber;
public String getRelationShip() {
return relationShip;
}
public void setRelationShip(String relationShip) {
this.relationShip = relationShip;
}
public String getPhoneNumber() {
return phoneNumber;
}
public void setPhoneNumber(String phoneNumber) {
this.phoneNumber = phoneNumber;
}
}
public class AyTest {
public static void main(String[] args){
//存放所有的通讯录
List<AddressBook> allAddressBook = new ArrayList<>();
//从魔法杂货店购买家人通讯录 10代表10个
List<AddressBook> familyAddressBooks = Boy.buy(new AddressBook("通讯录","家人","77777"), 10);
//从魔法杂货店购买朋友通讯录 200代表200个
List<AddressBook> friendAddressBooks = Boy.buy(new AddressBook("通讯录2","朋友","55555"), 200);
//从魔法杂货店购买同学通讯录 200代表200个
List<AddressBook> classmateAddressBooks = Boy.buy(new AddressBook("通讯录3","同学","666666"), 200);
allAddressBook.addAll(familyAddressBooks);
allAddressBook.addAll(friendAddressBooks);
allAddressBook.addAll(classmateAddressBooks);
//打印出所有的通讯录
allAddressBook = allAddressBook.stream()
.peek(addressBook -> System.out.println(addressBook.getRelationShip()
+ " " + addressBook.getPhoneNumber()))
.collect(Collectors.toList());
}
}
//结果
家人0 777770
......
家人8 777778
家人9 777779
朋友0 555550
......
朋友54 5555554
朋友55 5555555
......
朋友199 666666199
同学0 5555550
男孩把通讯录整理下:
//男孩给通讯录分组了
Map<String,List<AddressBook>> groupMap = allAddressBook
.parallelStream()
.collect(Collectors.groupingBy(addressBook -> addressBook.getName()));
for(String key:groupMap.keySet()){
System.out.println(key + groupMap.get(key));
}
//男孩按照是否为 通讯录1(既家人)给通讯录分组了
Map<Boolean,List<AddressBook>> groupMap2 = allAddressBook
.stream()
.collect(Collectors.partitioningBy(addressBook -> addressBook.getName().equals("通讯录1")));
for(String key:groupMap2.keySet()){
System.out.println(key + groupMap2.get(key));
}
//男孩给通讯录分组,并计算每个分组的数量
Map<String,Long> groupMap3 = allAddressBook
.stream()
.collect(Collectors.groupingBy(((addressBook) -> addressBook.getName()),Collectors.counting()));
//打印
for(String key:groupMap3.keySet()){
System.out.println(key + " " + groupMap3.get(key));
}
//结果
通讯录1 10
通讯录3 200
通讯录2 200
事实上,这些无聊的行为只是男孩给女孩发消息前的一些无聊之举,男孩不知道给女孩发什么,男孩心里很紧张,写好的消息反反复复的删除,修改,删除,修改......最后男孩发了句:“在忙么”。
男孩继续整理手机里的资料,但每隔几分钟都会看对话框一眼,担心错过女孩消息,忐忑,紧张又期待......
//男孩给通讯录分组,并计算每个分组的数量(支持并发操作,只需把stream改为parallelStream即可)
Map<String,Long> groupMap4 = allAddressBook
.parallelStream()
.collect(Collectors.groupingBy(((addressBook) -> addressBook.getName()),Collectors.counting()));
//男孩循环查看每个通讯录,利用forEach可以实现对集合循环遍历
allAddressBook.parallelStream().forEach(addressBook ->{
System.out.println(addressBook.getId() + " " + addressBook.getName());
});
男孩并无等到女孩的消息。那一晚,男孩又失眠了......
/**
* 描述:手机
* @author Ay
*/
class Mobile extends Object{
}
/**
* 描述:男孩手机
* @author Ay
*/
class BoyMobile extends Object{
}
/**
* 描述:女孩手机
* @author Ay
*/
class GirlMobile extends Object{
}
故事未完,待续......
参考文章
【4】精通lambda表达式:Java多核编程-sy.pdf
【5】Java 8 Streams API:对Stream分组和分区
读书感悟
来自弗洛伊德《梦的解析》
- 宁肯听任自己失望,也绝不乱存奢望。
- 梦的内容是由于意愿的形成,其目的在于满足意愿。
- 每一个梦都起源于第一种力量(欲望),但受到了第二种力量(意识)的防御和抵制。
- 梦是一个(受压制或者被压制的)欲望的(伪装的)满足。
- 实际上,梦是一种愿望的达成。
- 梦的内容乃是欲望的满足,而梦的动机却是一种欲望。
其他
如果有带给你一丝丝小快乐,就让快乐继续传递下去,欢迎点赞、顶、欢迎留下宝贵的意见、多谢支持!