java8实战一------解决冗杂,java8真的很便利(抛砖)
你的代码很容易因为需求而变化,对自己代码改来改去的你一定会觉得烦的。在我看来,java8很容易的解决了这个问题。
先来看看例子!在一堆苹果里,筛选绿色的苹果。当然,Apple类是这样子。
class Apple{
private Integer weight;
private String color;
public Apple(Integer weight,String color){
this.weight=weight;
this.color=color;
}
public Integer getWeight(){
return this.weight;
}
public void setWeight(Integer weight) { this.weight = weight; }
public String getColor() { return color; }
public void setColor(String color) { this.color = color; }
@Override
public String toString() {
return "Apple{" +
"weight=" + weight +
", color='" + color + '\'' +
'}';
}
}
一、筛选绿苹果:
public static List<Apple> findGreen(List<Apple> apples){
List<Apple> greens=new ArrayList<> ();
for(Apple a:apples){
if ("green".equals (a.getColor ())){
greens.add (a);
}
}
return greens;
}
二、这次,农民又要把苹果按给的颜色分:我们加个参数就可以了。
public static List<Apple> findGreen(List<Apple> apples,String color){
List<Apple> greens=new ArrayList<> ();
for(Apple a:apples){
if (color.equals (a.getColor ())){
greens.add (a);
}
}
return greens;
}
}
三、然后,农民说:能分轻重就好了,你当然还是有解决方案:
public static Map<String,List<Apple>> findGreen(List<Apple> apples,int weight){
Map<String,List<Apple>> map=new HashMap<> ();
List<Apple> ws=new ArrayList<> ();
List<Apple> ls=new ArrayList<> ();
for(Apple a:apples){
if(weight>a.getWeight ()){
ls.add (a);
}else {
ws.add (a);
}
}
map.put ("轻",ls);
map.put ("重",ws);
return map;
}
很轻松解决了问题嘛!但你会发现你在颜色和重量上又很严重的代码重复。这是,农民又有要求了,要将颜色不同的也分重量。哇,有完没完!!!
当然,这个问题可以使用策略设计模式。我就不多叙述了,我想讲的java8,好了,我终于可以奉上我的代码了。
于是,我们可以走捷径了。
四,使用java8:
import java.util.*;
import java.util.stream.Collectors; /**
* 觉得好玩嘛
*/
public class Demo1 {
public static void main(String[] args) {
Apple a1 = new Apple (5, "red");
Apple a2 = new Apple (3, "red");
Apple a3 = new Apple (10, "green");
Apple a4 = new Apple (1, "green");
List<Apple> list = Arrays.asList (a1, a2, a3, a4);
Map<String, Map<Boolean, List<Apple>>> map = list.stream ()
.collect (Collectors.groupingBy (Apple::getColor, Collectors.groupingBy (e -> {
return e.getWeight () > 4;
})));
System.out.println (map);
}
}
结果:(false为轻,true为重)
map={red={false=[Apple{weight=3, color='red'}], true=[Apple{weight=5, color='red'}]},
green={false=[Apple{weight=1, color='green'}], true=[Apple{weight=10, color='green'}]}}
怎么回事,小老弟?是不是很短。java8真的很好用呢。
我会陆续的把我学的分享给大家的。
java8实战一------解决冗杂,java8真的很便利(抛砖)的更多相关文章
- Java的演化-Java8实战笔记
一个语言要想一直有活力,它也需要跟随着时代的变化去进步,Java作为一个古老的语言,它其实有太多的历史包袱,在改变的过程中需要考虑很多,但是它也在慢慢的演变,巩固自己的城墙,不让自己被遗忘在历史中(不 ...
- Java8实战及自己的总结
java8 介绍 java8是2014年3月份,由Oracle发布的一个版本,又称之为jdk1.8,是现再我们在学习和工作中用的最多的一个版本. 在jdk1.8中,java8以添加非常多的新特性, ...
- Java8实战——自己的总结
java8 介绍 java8是2014年3月份,由Oracle发布的一个版本,又称之为jdk1.8,是现再我们在学习和工作中用的最多的一个版本. 在jdk1.8中,java8以添加非常多的新特 ...
- java8实战:filter的简单使用
<JAVA8实战>中的例子 要实现的功能:通过Apple的color或weight属性,对List<Apple>进行筛选. 1.首先定义com.owl.entity.Apple ...
- HTTP真的很简单
原文:HTTP Made Really Easy因为我本身网络基础就很差,所以看到这篇文章一方面是学习网络知识,另一方面为了锻炼我蹩脚的英语水平,文中如有错误,欢迎浏览指正! 前言 在看这篇文章的时候 ...
- HTTP真的很简单(转)
原文:HTTP Made Really Easy因为我本身网络基础就很差,所以看到这篇文章一方面是学习网络知识,另一方面为了锻炼我蹩脚的英语水平,文中如有错误,欢迎浏览指正! 前言 在看这篇文章的时候 ...
- 面试阿里百分百问的Jvm,别问有没有必要学,真的很有必要朋友
面试阿里百分百问的Jvm,别问有没有必要学,真的很有必要朋友 前言: JVM 的内存模型和 JVM 的垃圾回收机制一直是 Java 业内从业者绕不开的话题(实际调优.面试)JVM是java中很重要的一 ...
- 值得推荐的C/C++框架和库 (真的很强大) c
http://m.blog.csdn.net/mfcing/article/details/49001887 值得推荐的C/C++框架和库 (真的很强大) 发表于2015/10/9 21:13:14 ...
- 【转】 值得推荐的C/C++框架和库 (真的很强大)
[转] 值得推荐的C/C++框架和库 (真的很强大) 值得学习的C语言开源项目 - 1. Webbench Webbench是一个在linux下使用的非常简单的网站压测工具.它使用fork()模拟多个 ...
随机推荐
- 【转】2、Jenkins构建完成自动发送邮件
1.开通163邮箱的授权码服务,和SMTP服务.百度找教程.2.安装 Email Extension Plugin 插件,已安装或版本自带可跳过此步骤.3.进入系统管理–系统设置首先配置 Jenkin ...
- 网络-02-端口号-linux端口详解大全
端口详解 1 tcpmux TCP Port Service Multiplexer 传输控制协议端口服务多路开关选择器 2 compressnet Management Utility compr ...
- 内存泄漏(I)
Block 解决内存泄漏 使用 weakSelf 进行解决 NSTimer 的内存泄漏与解决方案 内存泄漏
- Log4j2 日志级别
Log4j2日志级别 级别 在log4j2中, 共有8个级别,按照从低到高为:ALL < TRACE < DEBUG < INFO < WARN < ERROR < ...
- getparameter的使用
在做项目的过程中,会遇到跳转的页面,直接打开到里面的子项,这个时候,看了UI给我设计了四个页面,如果做四个页面,肯定是可以实现的.但是这个不符合前端的设计.就在想通过点击传值进去,肯定是能够获取到的. ...
- TeamCity 创建jar构建步骤
1 创建工程 2 配置工程代码来源信息 2.1 From a repository URL 表示从代码仓库创建工程. 2.1.1 parent project 指定父工程,默认是root projec ...
- php高精度计算问题
从事金融行业,资金运算频繁,这里说下我遇到的坑....稍不留神,用户资金可能损失几十万,甚至更可怕......直接上实例吧: javascript 0.1 + 0.2 为啥不等于 0.3 ? (正确结 ...
- kafka学习-坑篇
安装(滤过) 启动(滤过) 坑(开始)--- topic creat完成后准备使用console-produce发布一个topic,错误如下: [-- ::,] WARN [Producer clie ...
- elasticsearch搭建并通过go-mysql-elasticsearch同步db数据达到搜索引擎的目的
logstash-input-jdbc/elasticsearch-jdbc缺点:删除记录没有办法同步,只能两边执行自己的删除命令,版本16年后未更新. go-mysql-elasticsearch缺 ...
- Client not ready yet.....
提示Client not ready yet.....程序安装上就提示停止了 Logcat无提示 只有run里边提示 Client not ready yet....... 我尝试了 Clean ...