你的代码很容易因为需求而变化,对自己代码改来改去的你一定会觉得烦的。在我看来,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. jQuery - 链(Chaining)

    http://www.runoob.com/jquery/jquery-chaining.html jQuery - 链(Chaining) 通过 jQuery,可以把动作/方法链接在一起. Chai ...

  2. idea用到的快捷键

    之前一直用的eclipse,早就听说idea更智能,更便捷,于是,下载了idea,然后再破解,现在就慢慢抛弃eclipse,平时就用idea进行编码. idea的快捷键与eclipse还是有较大不同, ...

  3. Git 工作环境配置

    Git config 简单介绍 Git的配置选项有:-system,-global 和 -local. ① system:系统级别的全局设置,对所有电脑用户生效,文件在/etc/gitconfig: ...

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

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

  5. BZOJ5279: [Usaco2018 Open]Disruption

    题目大意:给你一棵n个节点的树,这n条边称为原边,另给出m条带权值的额外边,求删去每条原边后通过给出的m额外条边变回一棵树的最小价值.题解:看完题面以为是Tarjan连通性之类的题目,冷静分析后想到是 ...

  6. ConcurrentHashMap源码理解

    1.ConcurrentHashMap继承关系 ConcurrentHashMap继承了AbstractMap类,同时实现了ConcurrentMap接口. 2.ConcurrentHashMap构造 ...

  7. autoit脚本-从基本的函数用法开始

    适配浏览器:目前了解的有ie浏览器 MsgBox 显示可选提示超时的消息框 _ArrayDisplay _arraydisplay($aArray)  ;$aArra一般为数组,方法用于展示表格展示数 ...

  8. Bootstrap常用单词组

    布局容器 .container 固定宽度 .container-fluid 全屏 .row 行 .col-lg- 大屏幕 .col-md- 中屏幕 变量 @grid-columns: 12 列数 @g ...

  9. javascript 之 函数

    注意:函数名仅仅是一个包含指针的变量而已 函数内部属性 arguments 和this 两个特殊对象 arguments:类数组对象,包含出入函数中的所有参数,主要用途是保存函数参数 callee:该 ...

  10. Javascript 中的数据类型判断

    (迁移自旧博客2017 09 25) typeof 我们常使用typeof来判断数据类型,在常规场景中足以应付数据类型判断的需要: var obj = { name: 'zhangxiang' }; ...