Java 13 都快要来了,12必须跟栈长学起!

Java 13 即将发布,新特性必须抢先看!

栈长之前在Java技术栈微信公众号分享过《Java 11 已发布,String 还能这样玩!》这篇文章,介绍了 Java 11 的 String 新玩法,让大家耳目一新。

Java 12 已经发布数月了:Java 12 正式发布,8大新特性!,今天我再来分享下在 Java 12 中关于 String 的三个骚操作,绝逼有用。

更多关于 Java 的资讯、干货教程、以及好消息,请关注微信公众号:Java技术栈,第一时间推送。

坐稳了,准备起飞!

1、transform

transform:即字符串转换,来看下 transform 的实现源码:

public <R> R transform(Function<? super String, ? extends R> f) {
return f.apply(this);
}

传入一个函数式接口 Function,接受一个值,返回一个值,参考:Java 8 新特性之函数式接口

废话少说,直接上手就是干:

private static void testTransform() {
System.out.println("======test java 12 transform======");
List<String> list1 = List.of("Java", " Python", " C++ ");
List<String> list2 = new ArrayList<>(); list1.forEach(element ->
list2.add(element.transform(String::strip)
.transform(String::toUpperCase)
.transform((e) -> "Hi," + e))
); list2.forEach(System.out::println);
}

结果输出:

======test java 12 transform======
Hi,JAVA
Hi,PYTHON
Hi,C++

示例是对一个字符串连续转换了三遍,代码很简单,大家都能领会的。

2、indent

直接看示例吧:

private static void testIndent() {
System.out.println("======test java 12 indent======");
String result = "Java\n Python\nC++".indent(3);
System.out.println(result);
}

结果输出:

======test java 12 indent======
Java
Python
C++

换行符 \n 后前缩进 N 个空格,为 0 或负数不缩进。

以下是 indent 的核心源码:

private String indent(int n, boolean removeBlanks) {
Stream<String> stream = removeBlanks ? lines(Integer.MAX_VALUE, Integer.MAX_VALUE)
: lines();
if (n > 0) {
final String spaces = " ".repeat(n);
stream = stream.map(s -> spaces + s);
} else if (n == Integer.MIN_VALUE) {
stream = stream.map(s -> s.stripLeading());
} else if (n < 0) {
stream = stream.map(s -> s.substring(Math.min(-n, s.indexOfNonWhitespace())));
}
return stream.collect(Collectors.joining("\n", "", "\n"));
}

其实就是调用了 lines() 方法来创建一个 Stream,然后再往前拼接指定数量的空格。

参考:《Java 11 已发布,String 还能这样玩!》这篇文章对 lines() 的介绍。

3、describeConstable

private static void testDescribeConstable() {
System.out.println("======test java 12 describeConstable======");
String name = "Java技术栈";
Optional<String> optional = name.describeConstable();
System.out.println(optional.get());
}

结果输出:

======test java 12 describeConstable======
Java技术栈

Java 12, String 实现了 Constable 接口:

java.lang.constant.Constable

这个接口就有一个方法,源码如下:

public interface Constable {

    Optional<? extends ConstantDesc> describeConstable();

}

Java 12 String 的实现源码:

@Override
public Optional<String> describeConstable() {
return Optional.of(this);
}

很简单,其实就是调用 Optional.of 方法返回一个 Optional 类型,Optional不懂的可以参考这篇文章:Java 8 新特性之 Optional

好了,今天的分享就到这,收藏转发一下吧,多学习了解,日后必定有用!

历史 Java 新特性干货分享:



获取上面这份 Java 8~12 系列新特性干货文章,请在微信搜索关注微信公众号:Java技术栈,在公众号后台回复:java。

Java 12 新特性继续更新中……

本文原创首发于微信公众号:Java技术栈(id:javastack),转载请原样保留本信息。

Java 12 骚操作, String居然还能这样玩!的更多相关文章

  1. Java 12 骚操作, 文件比对居然还能这样玩!

    Java 13 都快要来了,12必须跟栈长学起! Java 13 即将发布,新特性必须抢先看! 之前分享了一些 Java 12 的骚操作,今天继续,今天要分享的是 Java 12 中的文件比对骚操作. ...

  2. Java 12 骚操作, switch居然还能这样玩!

    Java 13 都快要来了,12必须跟栈长学起! Java 13 即将发布,新特性必须抢先看! Java 12 中对 switch 的语法更友好了,建议大家看下栈长在Java技术栈微信公众号分享的&l ...

  3. 打破你的认知!Java空指针居然还能这样玩,90%人不知道…

    相信在座的各位都遇到过空指针异常,不甚其烦,本文不是教你避免空指针,而是一些对空指针其他方面的理解. 本文可能有点另类,也可能会打破你对空指针的认知. 1.null.method() 空指针? 我们知 ...

  4. 四:Java之字符串操作String、StringBuffer和StringBuilder

    string是我们经经常使用到的一个类型,事实上有时候认为敲代码就是在重复的操作字符串,这是C的特点,在java中.jdk非常好的封装了关于字符串的操作.三个类String .StringBuffer ...

  5. 简直骚操作,ThreadLocal还能当缓存用

    背景说明 有朋友问我一个关于接口优化的问题,他的优化点很清晰,由于接口中调用了内部很多的 service 去组成了一个完成的业务功能.每个 service 中的逻辑都是独立的,这样就导致了很多查询是重 ...

  6. 一波骚操作,我把 SQL 执行效率提高了 10,000,000 倍!

    作者:风过无痕-唐 http://www.cnblogs.com/tangyanbo/p/4462734.html 场景 我用的数据库是mysql5.6,下面简单的介绍下场景 课程表: create  ...

  7. switch多值匹配骚操作,带你涨姿势!

    我们都知道 switch 用来走流程分支,大多情况下用来匹配单个值,如下面的例子所示: /** * @from 微信公众号:Java技术栈 * @author 栈长 */ private static ...

  8. 用Markdown写Html和.md也就图一乐,真骚操作还得用来做PPT

    前言 和这篇文章一样,我就是用Markdown写的.相信各位平时也就用Markdown写写文档,做做笔记,转成XHtml.Html等,今天教大伙一招骚操作:用Markdown写PPT. 绝大多数朋友做 ...

  9. Java 11 已发布,String 还能这样玩!

    在文章<Java 11 正式发布,这 8 个逆天新特性教你写出更牛逼的代码>中,我有介绍到 Java 11 的八个新特性,其中关于 String 加强部分,我觉得有点意思,这里单独再拉出来 ...

随机推荐

  1. 基于MUI框架+HTML5PLUS 开发 iOS和Android 应用程序(APP)

    目录 事前准备 创建项目 利用MUI写一个简单的页面 关于文件打包 事前准备 # 软件 HBuilder X Web开发IDE 下载地址:https://www.dcloud.io/hbuilderx ...

  2. v-for循环列表,展开样式随手风琴

    <div class="product_box" v-for="(item,index) of kinds" :key="index" ...

  3. 在Spring中使用AspectJ实现AOP

    在Spring中,最常用的AOP框架是AspectJ,使用AspectJ实现AOP有2种方式: 基于XML的声明式AspectJ 基于注解的声明式AspectJ 基于XML的声明式AspectJ 1. ...

  4. Hive性能优化【核心思想、运行模式、并行计算】

    一.核心思想 把HQL当做MapReduce程序去优化. 注意,以下SQL不会转为MapReduce执行: 1.select仅查询本表字段. 2.where仅对本表字段做条件过滤. 二.启动Hive ...

  5. 【OGG】OGG简单配置双向复制(三)

    [OGG]OGG简单配置双向复制(三) 一.1  BLOG文档结构图 一.2  前言部分 一.2.1  导读 各位技术爱好者,看完本文后,你可以掌握如下的技能,也可以学到一些其它你所不知道的知识,~O ...

  6. 【Spring Boot】Spring Boot之跨域解决方案

    一.什么是跨域 跨域,指的是从一个域名去请求另外一个域名的资源.即跨域名请求!跨域时,浏览器不能执行其他域名网站的脚本,是由浏览器的同源策略造成的,是浏览器施加的安全限制. 跨域的严格一点来讲就是只要 ...

  7. Unicode字符集的由来

    *:first-child { margin-top: 0 !important; } .markdown-body>*:last-child { margin-bottom: 0 !impor ...

  8. 《大象 Thinking in UML》读书笔记:Process-oriented vs. Object-oriented

    前言 面向过程 还是 面向对象?这不仅仅是个软件工程术语,其问题甚至可以追溯到亚里士多德:您把这个世界视为过程还是对象? 回归到现今的软件行业,这不仅仅是个某个具体编程技术问题,更是认识论问题. 认识 ...

  9. pycharm新建项目后按钮灰色问题

    同样适用于导入别人的新项目后无法运行问题 原因一: pycharm没有设置系统解析器 解决方法一: 打开pycharm->File->Settings->Project Interp ...

  10. ViCANdo新版本发布(PART1) | 点云库(PCL)集成

    激光雷达         随着智能驾驶技术的发展,激光雷达迅速的进入工程师的视野,不管是机械式.MEMS还是纯固态激光雷达,本质上都是以一定的速度扫描照射区域,在此过程中激光雷达不断的发出激光并接收反 ...