欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

Java,

来源: javaer 分享于  点击 36755 次 点评:115

Java,


1:Java String 综述(上篇)

2:Java String 综述(下篇)

3:java基本数据类型传递与引用传递区别详解

4:重写equal()时为什么也得重写hashCode()之深度解读equal方法与hashCode方法渊源

  • Java 中的 ==, equals 与 hashCode 的区别与联系

5:Java 内部类综述

6:Java 泛型(Generics) 综述

7:深入理解Java类型信息(Class对象)与反射机制

8:深入理解Java注解类型(@Annotation)

9:深入理解Java枚举类型(enum)

10:序列化

  • 10.1:Java序列化的几种方式
  • 10.2:[疯狂Java]I/O:其它自定义序列化的方法(transient、writeReplace、readResolve、Externalizable)

11:Java 异常模型综述

12:Java IO

13:Java正则表达式

14:Dom4j完整教程

15:Java集合系列

16:Java8日期和时间API

17:JAVA8之lambda表达式详解,及stream中的lambda使用

18:Java8中的Stream API详解:Stream的背景及使用

Lambda和Stream总结:
Lambda:
要使用lambda第一:必须要知道函数式接口,这包括JDK自带的和自定义的;第二:要知道哪些地方可以支持函数式接口.比如最常见的函数式接口Runnable,然后可以在Thread里面使用函数式接口:

new Thread(() -> System.out.println("I am running")).start();

Stream:
Stream是建立在Lambda的基础上的.使用步骤.
Step1:获取Stream,从Collection和数组获得、从BufferedReader获得、java.util.stream.IntStream.range()等等,但是常用的是使用Collection接口的 .stream()方法得到stream.

Collection.stream();Collection.parallelStream()

Step2:过滤流,中间方法即是一些列对元素进行的操作。譬如过滤、去重、截断等。

例1:用Filter过滤18岁以上的人
List persons = …
Stream personsOver18 = persons.stream().filter(p -> p.getAge() > 18);
例2:用Map把List person转成Map Adult
Stream map = persons.stream().filter(p -> p.getAge() > 18).map(person -> new Adult(person)); 

Step3:收集结果,通过中间方法,我们对stream的元素进行了统一的操作,但是中间方法得到还是一个stream。要想把它转换为新的集合、或者是统计等。我们需要使用终点方法。

例1:用count统计结果
int countOfAdult=persons.stream()
                   .filter(p -> p.getAge() > 18)
                   .map(person -> new Adult(person))
                   .count();
 例2:用collect转换成List.     
 List adultList= persons.stream()
                   .filter(p -> p.getAge() > 18)
                   .map(person -> new Adult(person))
                   .collect(Collectors.toList());
 例3:用collect转换成Map.
 Map<Integer , String> idToName = people.collect(Collectors.toMap(Person ::getld, Person:: getName)) ;  

关于并行流:
当流操作以并行形式运行时,它应当返回与串行运行时相同的结果。重要的一点
是,操作是无状态的, 并且可以以任意顺序执行。确保所有传递给并行流操作的函数都是线程安全的,实现这个目标的最好方式就是远离可变状态
反例:假如你想要对字符串流中的所有短单词进行计数.

int[] shortWords = new int(12) ;
// 错误---竞争条件!
words.para11elStream().forEach (s - > { if (s.length () < 12 ) shortWords[s.length())++;});

正确的例子:按长度将字符串进行分组并进行计数

Map<Integer,Long> shortWordCounts =words.parallelStream().filter(s -> s.length() < 10 ).co11ect(groupingBy(String::length ,counting()));

19:java中Object类的方法

20:Java中网络编程重点总结

相关文章

    暂无相关文章
相关栏目:

用户点评