文档章节

5、杂项

MiaoXG
 MiaoXG
发布于 2016/06/22 10:39
字数 835
阅读 31
收藏 1

5.1 字符串

Java 8 中,String类只添加了一个方法:join,作用是按照指定分隔符将多个字符串组合起来,可以认为它是split方法的反操作。

String joined = String.join("/", "usr", "local", "bin");
System.out.println(joined);
 
String[] ids = {"1", "3", "6"};
System.out.println(String.join(",", ids));

// 输出结果是
// usr/local/bin
// 1,3,6

5.2 集合

集合类最大的改变就是支持流操作。另外,还添加了其它一些有用的方法。

类/接口 新方法
Iterable forEach
Collection removeIf
List replaceAll, sort
Map forEach, replace, replaceAll, remove(key, value), putIfAbsent, compute, computeIfAbsent, computeIfPresent, merge
Iterator forEachRemaining

其中大部分方法都能直接看出用途,只有compute*、merge、forEachRemaining比较陌生,简单介绍一下这几个方法:

1、compute

通过key和一个函数计算出新的值

Map<String, String> map = new HashMap<>();
map.put("key", "value");
System.out.println(map.compute("key", String::concat));  // 输出 keyvalue

2、merge

合并value,如果key不存在,使用给定的值作为value。与compute不同的是merge不处理key, eg:计数,如果存在key,+1;如果不存在,赋值为1

Map<String, Integer> map = new HashMap<>();
map.merge("key", 1, (i1, i2) -> i1 + i2);
System.out.println(map.get("key"));  // 输出 1

map.merge("key", 1, (i1, i2) -> i1 + i2);
System.out.println(map.get("key"));  // 输出 2

3、forEachRemaining

能够将Iterator中迭代剩余的元素传递给一个函数

List<String> list = Arrays.asList("a", "b", "c", "d", "e");
Iterator<String> it = list.iterator();
while (it.hasNext()) {
    if ("c".equals(it.next())){
        break;
    }
}
it.forEachRemaining(s -> System.out.print(s + " "));  // 输出 d e

5.3 比较器

Comparator接口新增comparing方法,该方法接收一个函数,函数的返回值就是用于比较的对象。同时,支持多级比较。

// 先按照name进行排序,如果name一样,按照age排序
public static void main(String[] args) {
    Person[] ps = {new Person("a", 20), new Person("b", 20), new Person("a", 18)};
    Arrays.sort(ps, Comparator.comparing(Person::getName).thenComparing(Person::getAge));
    System.out.println(Arrays.asList(ps));   // 输出 [Person{name='a', age=18}, Person{name='a', age=20}, Person{name='b', age=20}]
}

private static class Person{

    private String name;
    private int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
    // 省略get set
 
    @Override
    public String toString() {
        return "Person{" +
                "name='" + name + '\'' +
                ", age=" + age +
                '}';
    }
}

ps:Comparator接口还有其它的一些使用方式,就不一一列举了。

5.4 Base64 编码

Base64 编码是一种将非ASCII字符转为ASCII字符的编码方式,主要用于转换字节数组成为可打印的字符序列。在之前的版本,JDK 中提供了 sun.misc.BASE64Encoder 这个类,但是sun.misc 这个包是SUN公司的实现,并非J2SE规范的实现,而且BASE64Encoder 没有任何文档说明,所以我们一般会自己实现或使用第三方实现。终于,Java 8 提供了一个标准的编码器和解码器。

/*
 * 三种编码器:
 * 1、常规Base64编码器,没有换行
 * 2、电子邮件是用的MIME标准编码器,每76个字符使用一个"\r\n"换行符
 * 3、对URL和文件名安全的编码器,使用“-”和“_”替换“+”和“/”
 */
Base64.getEncoder();
Base64.getMimeEncoder();
Base64.getUrlEncoder();

5.5 Null 检查

Objects类新增了两个静态的断言(pridicate)方法,isNull 和 nonNull,这两个方法在使用流的时候非常实用。例如

stream.anyMatch(Objects::isNull);   // 检查一个流是否含有null值
stream.filter(Objects::nonNull);  // 获取所有非null的对象

5.6 JDBC

在Java 8 中,JDBC 已经升级到了4.2版本,该版本为 java.sql 包中的 Date、Time 和 Timestamp 类提供了一些方法,可以与 java.time 包中对应的 LocalDate、LocalTime 和 LocalDateTime 类互相进行转换。

Date date = new java.sql.Date(System.currentTimeMillis());
Instant instant = date.toInstant();
LocalDate localDate = date.toLocalDate();

© 著作权归作者所有

MiaoXG
粉丝 2
博文 19
码字总数 17098
作品 0
朝阳
程序员
私信 提问
HAWQ取代传统数仓实践(十)——维度表技术之杂项维度

一、什么是杂项维度 简单地说,杂项维度就是一种包含的数据具有很少可能值的维度。事务型商业过程通常产生一系列混杂的、低基数的标志位或状态信息。与其为每个标志或属性定义不同的维度,不...

wzy0623
2017/05/27
0
0
documentMode和compatMode

这两个属性都是document的 documentMode是ie7,8,9,10的专有属性,表示文档模式有5,7,8,9,10, ie6是undefined compatMode是css模式,各种浏览器都是CSS1Compat,除了ie的杂项模式(如果没有声明<...

thinkgood
2013/01/05
241
0
需求分析

子杰: 1 按区域获取供销商商品 2 关键字搜商品 3 下单订购 4 一键下单 盛挺: 切入点: 从卖家角度考虑可以参考公式:单项产品收益=(单件产品售价-单件产品成本)*有效销售数量-杂项 我们能...

Tic
2015/07/17
7
0
薛定谔波动方程怎么在MathType中进行编辑

在物理学中有很多经典的公式,而MathType数学公式编辑器强大的公式编辑能力能够非常完美的输入这些公式,以薛定谔波动方程为例,我们该在MathType中如何进行编辑呢? 若有疑问可直接访问:h...

MathType
2015/10/29
43
0
基于Hadoop生态圈的数据仓库实践 —— 进阶技术(十)

十、杂项维度 本节讨论杂项维度。简单地说,杂项维度就是一种包含的数据具有很少可能值的维度。例如销售订单,它可能有很多离散数据(yes-no这种类型的值),如 verification_ind(如果订单已...

wzy0623
2016/08/01
0
0

没有更多内容

加载失败,请刷新页面

加载更多

经典系统设计面试题解析:如何设计TinyURL(二)

原文链接:https://www.educative.io/courses/grokking-the-system-design-interview/m2ygV4E81AR 编者注:本文以一道经典的系统设计面试题:《如何设计TinyURL》的参考答案和解析为例,帮助...

APEMESH
14分钟前
7
0
使用logstash同步MySQL数据到ES

概述   在生成业务常有将MySQL数据同步到ES的需求,如果需要很高的定制化,往往需要开发同步程序用于处理数据。但没有特殊业务需求,官方提供的logstash就很有优势了。   在使用logstas...

zxiaofan666
24分钟前
6
0
X-MSG-IM-分布式信令跟踪能力

经过一周多的鏖战, X-MSG-IM的分布式信令跟踪能力已基本具备, 特点是: 实时. 只有要RX/TX就会实时产生信令跟踪事件, 先入kafka, 再入influxdb待查. 同时提供实时sub/pub接口. 完备. 可以完整...

dev5
34分钟前
6
0
OpenJDK之CyclicBarrier

OpenJDK8,本人看的是openJDK。以前就看过,只是经常忘记,所以记录下 图1 CyclicBarrier是Doug Lea在JDK1.5中引入的,作用就不详细描述了,主要有如下俩个方法使用: await()方法,如果当前线...

克虏伯
37分钟前
6
0
实战项目-学成在线(八)

在前后端分离架构中,服务层被拆分成了很多的微服务,微服务的信息如何管理?Spring Cloud中提供服务注册中心来管理微服务信息。 注册中心作用: 1、微服务数量众多,要进行远程调用就需要知...

lianbang_W
38分钟前
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部