像写C#一样编写java代码
JDK8提供了非常多的便捷用法和语法糖,其编码效率几乎接近于C#开发,maven则是java目前为止最赞的jar包管理和build工具,这两部分内容都不算多,就合并到一起了。
愿编写java代码的过程如:Fast & Furious
鸟枪换炮咯,走起!J Java 7发布于2011年,Java 8发布于2014年,Java 9还远么?
在javase8中,lambda表达式的形式基本好C#中一致,Stream和LINQ类似,Future<T>和Task<T>类似,可以这样说,javase8大体达到了C#编码的便捷程度哈!帅帅哒
Lambda(和.NET一样)
功能 |
示例 |
函数式接口 |
Arrays.sort(words, (first, second) -> Integer.compare(first.length(), second.length())); BiFunction<String, String, Integer> comp = (first, second) -> Integer.compare(first.length(), second.length()); 常见的函数式接口(推荐使用),和C#Action<T>,Function<T, R>类似 Runnable,Supplier<T>,Consumer<T>, Function<T, R>, Predicate<T> |
方法引用 |
Arrays.sort(words, String::compareToIgnoreCase); |
构造器引用 |
list.stream().collect(Collectors.toList()); |
默认方法,接口中的静态方法 |
不太推荐 |
概念 |
所有的lambda表达式都符合闭包,且是延迟执行的 |
Stream
功能 |
示例 |
创建Stream |
Stream<String> song = Stream.of("Shanghai", "Beijing"); |
filter,map,flatmap方法 |
分别对应C#中Linq的where,select和selectMany |
常见操作 |
去除重复: .distince() 排序.sorted(), 反向.reversed() 聚合方法 .max(), findFirst(), .findAny(), .anyMatch() 聚合操作 .reduce((x,y)->x+y) 分组和分片: .groupingBy(), mapping(), joining() 并行流: .parallel() |
Optional类型 |
Optional<T>是对T类型封装,它不会返回null,使得引用更安全 |
时间日期
在1.8以前,主要使用joda-time库来处理一些比较复杂的时间日期操作,现在有官方的api了。
功能 |
示例 |
时间线Instant |
Instant start = Instant.now(); Thread.sleep(1000); Instant end = Instant.now(); Duration timeElapsed = Duration.between(start, end); long millis = timeElapsed.toMillis(); |
本地日期LocalDate |
LocalDate today = LocalDate.now(); LocalDate oneDay = LocalDate.of(2017, 7, 9); LocalDate addDay = LocalDate.now().plusDays(10); |
日期校正器TemporalAdjueters |
获取2017年5月的第一个周二 LocalDate time = LocalDate.of(2017, 5, 1) .with(TemporalAdjusters.nextOrSame(DayOfWeek.TUESDAY)); |
本地时间LocalTime |
LocalTime time = LocalTime.of(16, 37, 11); |
带时区的时间ZonedDateTime |
ZonedDateTime applloTime = ZonedDateTime.of(2017, 5, 9, 16, 40, 11, 0, ZoneId.of("America/New_York")); |
格式化和解析DateTimeFormatter |
用于替代过去的DateFormat,SimpleDateFormat |
遗留代码的互操作 |
Instant start = Instant.now();其他类型的操作类似 Date oldDate = Date.from(start); |
并发
功能 |
示例 |
原子值 |
AtomicLong nextNumber = new AtomicLong(); nextNumber.incrementAndGet(); |
ConcurrentHashMap的改进 |
ConcurrentMap<String, Integer> map = new ConcurrentHashMap(); map.putIfAbsent("age", 100); map.compute("name", (k, v) -> v == null ? 1 : v + 1); map.merge("age", 1, (oldValue, newValue) -> oldValue + newValue); 批量数据操作:reduceValue, reduceKeys |
并行数组操作 |
String[] people = new String[]{"xionger", "shuaishuaida"}; Arrays.parallelSort(people); |
Future,和.NET的Task<T>类似 |
CompletableFuture<String> contents = CompletableFuture.supplyAsync(() -> getAsync()); 这部分知识之后再加强 |
杂项
功能 |
示例 |
字符串 |
String joined = String.join("/", "user", "local", "bin"); |
数字扩展 |
Long testValue = Integer.toUnsignedLong(Integer.MAX_VALUE); |
新的数值函数 |
int result = Math.floorMod(Math.toIntExact(100L), 3); |
新增集合方法 |
list.forEach((item) -> System.out.println(item)); Map: remove, putIfAbsent, computeIf, merge 排序:Arrays.sort(people, Comparator.comparing(Person::getAge)); |
使用文件 |
这儿看到try-with-resource,等价于using,java代码也可以和.net一样简介 try (Stream<String> lines = Files.lines(path)) { Optional<String> pwd = lines.filter(s -> s.contains("pwd")).findFirst();} |
Base64编码 |
Base64.Encoder encoder = Base64.getMimeEncoder(); try (OutputStream output = Files.newOutputStream(encoderPath)) { Files.copy(originalPath, encoder.wrap(output));} |
注解 |
通过在注解上添加@Repeatable,使得注解可多次使用 可以使用基于类型的注解 private @NonNull List<String> names = new ArrayList<>(); 方法参数反射,可以反射获取参数的名称 |
Java7 |
使用Path接口来代替File类 Path absolute = Paths.get("/", "home", "shanghai "); Files.write(absolute, content.getBytes(StandardCharsets.UTF_8)); |
Tip: demo项目
Maven使用起来相对比较简单,其配置均写在setting.xml中,主要的配置项包括镜像的选择和本地仓库的选择,如下所示。
View Code
其他常见的包括Eclipse中maven的配置,这部分只需要指定好Installations和UserSetting就好。
Maven编译的常见命令如下所示
命令 | 诠释 |
mvn package | 生成target目录,编译、测试代码,生成测试报告,生成jar/war文件 |
mvn tomcat:run | 运行项目于tomcat[jetty等server也OK]上 |
mvn compile | 编译 |
mvn test | 编译并测试 |
mvn clean | 清空生成的文件 |
mvn install -X | 想要查看完整的依赖踪迹,包含那些因为冲突或者其它原因而被拒绝引入的构件,打开 Maven 的调试标记运行 |
Maven的Scope | |
compile | 编译范围,默认的范围 |
provided | 已提供范围,比如有些web相关jar,tomcat中有,但本地没有时使用 |
runtime | 运行时范围,比如编译时只需要slf4j-api,运行时才需要具体的实现jar |
test | 测试范围,例如junit,spring-test |
Maven示例
View Code
本文转自帅气的头头博客51CTO博客,原文链接http://blog.51cto.com/12902932/1924096如需转载请自行联系原作者
sshpp
像写C#一样编写java代码相关推荐
- java代码如何与界面联系在一起_如何在Visual Studio Code 中编写Java代码
本文将展示如何在Visual Studio Code中用Java编写和运行一个简单的Hello World程序. 首先您必须在本地开发环境中安装Java SE开发工具包(JDK) Visual Stu ...
- java云端开发_云端编写Java代码的方法
云端编写Java代码的方法 通常情况下,正如云厂商和虚拟计算提供商所宣传的转移到云端是一个无缝的流程,经验却告诉我们过于猛烈地脱离内部数据中心,部署到云端是一种复杂的方式.从部署流程到方式的所有事情, ...
- java传播代码,如何编写java代码
现在我们学习的东西,只要知道怎么用就可以了.不需要知道为什么这么用,就像小时候学习1+1=2 我们知道一加一等于二不需要知道为什么等于二,不然这个学起来会很费力. 编写Java代码就像盖房子一样,我们 ...
- 08从零开始学Java之记事本怎么编写Java代码?
作者:孙玉昌,昵称[ 一一哥],另外[ 壹壹哥]也是我哦 CSDN博客专家.万粉博主.阿里云专家博主.掘金优质作者 配套开源项目资料 GitHub地址: https://github.com/SunL ...
- 如何更规范化编写Java 代码
作者: 涛姐涛哥 出处:https://www.cnblogs.com/taojietaoge/p/11575376.html 原文: https://www.cnblogs.com/taojieta ...
- jsp里面编写java代码注意加双引号
jsp里面编写java代码注意加双引号 if("<%=type%>"=="open"){document.getElementById(" ...
- 请阐述调用Activity有哪几种方法,并写出相关的Java代码
请阐述调用Activity有哪几种方法,并写出相关的Java代码. 答案:可以采用两种方式调用Activity:显示调用和隐式调用.显示调用直接指定了Activity,代码如下: Intent int ...
- 在IDEA中创建maven项目编写java代码操作HDFS集群
一.安装win10编译过的hadoop 1.将编译好的hadoop包放在非中文目录 2.配置HADOOP_HOME环境变量 3.将hadoop包的bin目录加到PATH环境变量中 二.在idea中创建 ...
- 像写SQL一样编写Java数据应用-TinySqlDsl
前言 话说企业应用,一般离不开数据库.要做数据库,可以有N种方案,比如:直接采用JDBC层自己封装下使用的,采用一些框架的,如:iBatis,Hiberate,Spring JDBC Template ...
- 八点建议写出优雅的 Java 代码
转自:Java技术江湖 在每一位刚入行的程序员的心中,编写程序都是一门神圣的艺术创作.他们无不希望自己的代码作品既简洁清晰,又可读性强,而且还具有一定的容错能力.本文将为您带来八点建议和技巧,以帮助您 ...
最新文章
- linux下启动jconsole报 java.lang.UnsatisfiedLinkError
- 《现代操作系统》第3章读书笔记--内存管理(未完成)
- C语言计数排序Counting sort 算法(附完整源码)
- Solr安装(单机版)
- Quartus II常见问题集锦
- ResultMap和ResultType在使用中的区别
- 7-166 二分法求多项式单根 (20 分)
- brew更新的时候不更新某个应用_可以不可以第六集剧情介绍,日剧可以不可以什么时候更新...
- java移位运算_Java 移位运算符
- Exadata是什么?
- 把内存中的数据传送到计算机硬盘称为,将内存中的数据传送到计算机硬盘的过程称为什么...
- ui设计是什么:ui设计学什么内容
- 数学与计算机学院英文翻译,数学与计算机,mathematics and computer science,音标,读音,翻译,英文例句,英语词典...
- 实现汽车租赁系统的计价功能
- 超详细的商业智能BI知识分享,值得收藏
- 苹果电脑python怎么安装request_python怎么装request
- vue和java获取地理位置经纬度
- WinCC 7.0 安装及使用过程部分注意事项
- 薪酬管理故事——猫抓老鼠
- STFT使用overlap-add重建信号