你的代码很容易因为需求而变化,对自己代码改来改去的你一定会觉得烦的。在我看来,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真的很便利(抛砖)的更多相关文章

  1. Java的演化-Java8实战笔记

    一个语言要想一直有活力,它也需要跟随着时代的变化去进步,Java作为一个古老的语言,它其实有太多的历史包袱,在改变的过程中需要考虑很多,但是它也在慢慢的演变,巩固自己的城墙,不让自己被遗忘在历史中(不 ...

  2. Java8实战及自己的总结

    java8 介绍 java8是2014年3月份,由Oracle发布的一个版本,又称之为jdk1.8,是现再我们在学习和工作中用的最多的一个版本.   在jdk1.8中,java8以添加非常多的新特性, ...

  3. Java8实战——自己的总结

    java8 介绍   java8是2014年3月份,由Oracle发布的一个版本,又称之为jdk1.8,是现再我们在学习和工作中用的最多的一个版本.   在jdk1.8中,java8以添加非常多的新特 ...

  4. java8实战:filter的简单使用

    <JAVA8实战>中的例子 要实现的功能:通过Apple的color或weight属性,对List<Apple>进行筛选. 1.首先定义com.owl.entity.Apple ...

  5. HTTP真的很简单

    原文:HTTP Made Really Easy因为我本身网络基础就很差,所以看到这篇文章一方面是学习网络知识,另一方面为了锻炼我蹩脚的英语水平,文中如有错误,欢迎浏览指正! 前言 在看这篇文章的时候 ...

  6. HTTP真的很简单(转)

    原文:HTTP Made Really Easy因为我本身网络基础就很差,所以看到这篇文章一方面是学习网络知识,另一方面为了锻炼我蹩脚的英语水平,文中如有错误,欢迎浏览指正! 前言 在看这篇文章的时候 ...

  7. 面试阿里百分百问的Jvm,别问有没有必要学,真的很有必要朋友

    面试阿里百分百问的Jvm,别问有没有必要学,真的很有必要朋友 前言: JVM 的内存模型和 JVM 的垃圾回收机制一直是 Java 业内从业者绕不开的话题(实际调优.面试)JVM是java中很重要的一 ...

  8. 值得推荐的C/C++框架和库 (真的很强大) c

    http://m.blog.csdn.net/mfcing/article/details/49001887 值得推荐的C/C++框架和库 (真的很强大) 发表于2015/10/9 21:13:14 ...

  9. 【转】 值得推荐的C/C++框架和库 (真的很强大)

    [转] 值得推荐的C/C++框架和库 (真的很强大) 值得学习的C语言开源项目 - 1. Webbench Webbench是一个在linux下使用的非常简单的网站压测工具.它使用fork()模拟多个 ...

随机推荐

  1. SQL中内连接和外连接的区别

    数据表的连接有: 1.内连接(自然连接): 只有两个表相匹配的行才能在结果集中出现 2.外连接: 包括 (1)左外连接(左边的表不加限制) (2)右外连接(右边的表不加限制) (3)全外连接(左右两表 ...

  2. 2015年上海现场赛重现 (A几何, K暴力搜索)

    A: 题目链接 :https://vjudge.net/contest/250823#problem/A 参考 : https://www.cnblogs.com/helenawang/p/54654 ...

  3. 机器学习算法GBDT

    http://www-personal.umich.edu/~jizhu/jizhu/wuke/Friedman-AoS01.pdf https://www.cnblogs.com/bentuwuyi ...

  4. [批处理]使用IncrediBuilder加速自动化测试过程

    背景 1.目前单机全部跑完一次测试的时间大概是5个小时 2.7个虚拟机进行分布式执行的时间大概为3.5小时(包含复制.收集日志的时间) 预期 期望通过IncrediBuilder的虚拟进程的功能在单机 ...

  5. PAT (Basic Level) Practice (中文)1006 换个格式输出整数 (15 分)

    题目链接:https://pintia.cn/problem-sets/994805260223102976/problems/994805318855278592 #include <iost ...

  6. SQLSERVER列出所有用户权限

    --服务器级权限WITH CTE AS(SELECT u.name AS 用户名,u.is_disabled AS 是否禁用,g.name as 服务器角色,'√' as 'flag'FROM sys ...

  7. python中的列表

    1.  列表是什么,他可以用来做什么呢?当你存在这样的疑问,就往下看吧:) 列表是由一系列按特定顺序排列的元素组成的.在Python中,用[]来表示列表,并用逗号来分隔其中的元素. 我们可以创建包含字 ...

  8. 原创《weex面向未来的架构》

    最近一直在做weex的调研工作,整理之后给公司做了一次技术分享. 分享内容如下: 1:Weex是什么? 2:  Weex目前能做什么? 3:  Weex 如何调试 4:  剖析一下Weex原理 5: ...

  9. sshpass安装使用

    部署sshpass1.下载wget http://sourceforge.net/projects/sshpass/files/latest/download -O sshpass.tar.gz 2. ...

  10. centos7安装supervisor

    安装supervisor cd /root/tools/ wget http://pnxcvm0bq.bkt.clouddn.com/get-pip.py python get-pip.py pip ...