如果人生有也能有第二版,我将会如何认真地修改校对!——克莱尔

直接上代码!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
package com.ruben;/**
* @ClassName: ListNodeDemo
* @Date: 2020/11/21 0021 00:06
* @Description:
*/

import java.util.Comparator;
import java.util.List;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.function.Function;
import java.util.stream.Collectors;
import java.util.stream.Stream;

/**
* @ClassName: ListNodeDemo
* @Description: 我还没有写描述
* @Date: 2020/11/21 0021 0:06
* *
* @author: <achao1441470436@gmail.com>
* @version: 1.0
* @since: JDK 1.8
*/
public class ListNodeDemo {

public static void main(String[] args) {
// 创建链表
ListNode zero = new ListNode(0);
ListNode one = new ListNode(1);
ListNode two = new ListNode(2);
ListNode three = new ListNode(3);

two.next = three;
one.next = two;
zero.next = one;

// 获取链表长度,为什么要获取链表长度呢?因为下面使用的无限流,在jdk8的时候是没法通过条件判断停止,所以这里使用limit去截取,jdk9的时候就可以不用下面的获取长度操作了
ListNode tmp = zero;
AtomicInteger length = new AtomicInteger();
while (tmp != null) {
length.getAndIncrement();
tmp = tmp.next;
}
// 链表转换成List<Integer>
List<Integer> integerList = Stream.iterate(zero, l -> l.next).limit(length.get()).mapToInt(l -> l.val).boxed().collect(Collectors.toList());
// 链表转换成int[]
int[] ints = Stream.iterate(zero, l -> l.next).limit(length.get()).mapToInt(l -> l.val).toArray();
// List<Integer>转换成链表
ListNode listNode = integerList.stream()
// 可以在这里进行倒序排序,以证明我们确实转换成功
.sorted(Comparator.reverseOrder())
.collect(() -> new ListNode(0), (listNode1, integer) -> {
ListNode tmp1 = listNode1;
while (tmp1.next != null) {
tmp1 = tmp1.next;
}
tmp1.next = new ListNode(integer);
}, (listNode12, listNode2) -> Function.identity());

System.out.println(listNode.val);
}

public static class ListNode {
int val;
ListNode next;

public ListNode(int x) {
val = x;
}
}
}