目录
java lambda表达式 forEach sort filter map reduce用法
lambda表达式遍历集合
迭代器获遍历集合
public class Lambda4CollectionTest {
@Test
public void test01(){
List<Integer> list = new ArrayList<>(){{
for (int i = 0; i < 10; i++) {
add(i);
}
}};
Iterator<Integer> it = list.listIterator();
while (it.hasNext()){
Integer next = it.next();
System.out.println(next);
}
}
}
lambda表达式遍历集合
public class Lambda4CollectionTest {
@Test
public void test02(){
List<Integer> list = new ArrayList<>(){{
for (int i = 0; i < 10; i++) {
add(i);
}
}};
list.forEach((num) -> {
System.out.println(num);
});
}
}
lambda表达式遍历集合简写
public class Lambda4CollectionTest {
@Test
public void test03(){
List<Integer> list = new ArrayList<>(){{
for (int i = 0; i < 10; i++) {
add(i);
}
}};
// 一行语句不用花括号
list.forEach((num) -> System.out.println(num));
}
}
public class Lambda4CollectionTest {
@Test
public void test04(){
List<Integer> list = new ArrayList<>(){{
for (int i = 0; i < 10; i++) {
add(i);
}
}};
// 一行语句不用花括号
list.forEach(System.out::println);
}
}
使用stream流遍历集合
public class Lambda4CollectionTest {
@Test
public void test05(){
List<Integer> list = new ArrayList<>(){{
for (int i = 0; i < 10; i++) {
add(i);
}
}};
// 串行流
list.stream().forEach(System.out::println);
}
}
使用parallelStream并行流遍历集合输出的元素是无序的
public class Lambda4CollectionTest {
@Test
public void test06(){
List<Integer> list = new ArrayList<>(){{
for (int i = 0; i < 10; i++) {
add(i);
}
}};
// 并行流
list.parallelStream().forEach(System.out::println);
}
}
输出遍历后的集合
6
5
7
9
4
8
0
3
1
2
streamAPI之filter
需求:挑出集合中的偶数生成一个新集合
迭代器遍历集合方式一:
public class Lambda4CollectionTest {
@Test
public void test07() {
List<Integer> list = new ArrayList<>() {{
for (int i = 0; i < 10; i++) {
add(i);
}
}};
ArrayList<Integer> newList = new ArrayList<>();
Iterator<Integer> it = list.listIterator();
while (it.hasNext()){
Integer next = it.next();
if (next % 2 == 0){
newList.add(next);
}
}
newList.forEach(System.out::println);
}
输出挑出集合中的偶数并生成了一个新集合
0
2
4
6
8
使用lambda表达式 filter方式二:
filter中predicate返回的是布尔值
collect(Collectors.toList)生成一个新的集合
public class Lambda4CollectionTest {
@Test
public void test08() {
List<Integer> list = new ArrayList<>() {{
for (int i = 0; i < 10; i++) {
add(i);
}
}};
List<Integer> newList = list.stream().filter(num -> num % 2 == 0).collect(Collectors.toList());
newList.forEach(System.out::println);
}
}
同样挑出集合中的偶数并生成了一个新集合
0
2
4
6
8
streamAPI之map
需求:使集合中的每一个元素乘以10然后生成一个新集合
迭代器遍历集合方式一:
public class Lambda4CollectionTest {
@Test
public void test09() {
List<Integer> list = new ArrayList<>() {{
for (int i = 0; i < 10; i++) {
add(i);
}
}};
ArrayList<Integer> newList = new ArrayList<>();
Iterator<Integer> it = list.listIterator();
while (it.hasNext()){
Integer next = it.next();
newList.add(next*10);
}
newList.forEach(System.out::println);
}
}
输出
0
10
20
30
40
50
60
70
80
90
使用lambda表达式map方式二:
map中 Function是传进一个参数类型并且返回一个参数类型
public class Lambda4CollectionTest {
@Test
public void test10() {
List<Integer> list = new ArrayList<>() {{
for (int i = 0; i < 10; i++) {
add(i);
}
}};
List<Integer> newList = list.stream().map(num -> num * 10).collect(Collectors.toList());
newList.forEach(System.out::println);
}
}
输出
0
10
20
30
40
50
60
70
80
90
streamAPI之reduce
需求:使集合中的每一个元素相加得到集合元素中的和
迭代器遍历集合方式一:
public class Lambda4CollectionTest {
@Test
public void test11() {
List<Integer> list = new ArrayList<>() {{
for (int i = 0; i < 10; i++) {
add(i);
}
}};
int sum = 0;
Iterator<Integer> it = list.listIterator();
while (it.hasNext()){
Integer next = it.next();
sum += next;
}
System.out.println(sum);
}
}
输出
45
使用lambda表达式reduce合并每个元素方式二:
public class Lambda4CollectionTest {
@Test
public void test12() {
List<Integer> list = new ArrayList<>() {{
for (int i = 0; i < 10; i++) {
add(i);
}
}};
Integer sum = list.stream().reduce((num0, num1) -> {
return num0 + num1;
}).get();
System.out.println(sum);
}
}
输出
45
streamAPI综合练习
需求:挑出集合中的偶数其每个偶数乘以2后并合计偶数总和
迭代器遍历集合方式一:
public class Lambda4CollectionTest {
@Test
public void test13() {
List<Integer> list = new ArrayList<>() {{
for (int i = 0; i < 10; i++) {
add(i);
}
}};
Integer sum = 0;
Iterator<Integer> it = list.listIterator();
while (it.hasNext()){
Integer next = it.next();
if (next % 2 == 0){
sum += next * 2;
}
}
System.out.println(sum);
}
}
40
使用 stream.of方法方式二:
public class Lambda4CollectionTest {
@Test
public void test14() {
Stream<Integer> stream = Stream.of(0, 1, 2, 3, 4, 5, 6, 7, 8, 9);
Integer sum = stream.filter(num -> num % 2 == 0).map(num -> num * 2).reduce((num0, num1) -> {
return num0 + num1;
}).get();
System.out.println(sum);
}
}
输出
40
lambda表达式遍历map
词频统计
public class Lambda4CollectionTest {
@Test
public void test15() {
Map<String, Integer> map = new HashMap<>();
// 词频统计
String content = "2022 04 13 2022 04 11 2022";
String[] words = content.split(" ");
for (String word : words) {
if (map.containsKey(word)){
Integer integer = map.get(word);
map.put(word, ++integer);
}else {
map.put(word, 1);
}
}
map.forEach((k, v) -> System.out.println(k + " >>> " + v));
}
}
输出
11 >>> 1
13 >>> 1
04 >>> 2
2022 >>> 3
lambda表达式集合排序
词频统计后进行排序
排序方式一:
public class Lambda4CollectionTest {
@Test
public void test16() {
Map<String, Integer> map = new HashMap<>();
// 词频统计
String content = "2022 04 13 2022 04 11 2022";
String[] words = content.split(" ");
for (String word : words) {
if (map.containsKey(word)){
Integer integer = map.get(word);
map.put(word, ++integer);
}else {
map.put(word, 1);
}
}
map.forEach((k, v) -> System.out.println(k + " >>> " + v));
System.out.println("++++++++++++++++++++");
Set<Map.Entry<String, Integer>> entrySet = map.entrySet();
ArrayList<Map.Entry<String, Integer>> list = new ArrayList<>();
Iterator<Map.Entry<String, Integer>> it = entrySet.iterator();
while (it.hasNext()) {
Map.Entry<String, Integer> entry = it.next();
list.add(entry);
}
list.sort(new Comparator<Map.Entry<String, Integer>>() {
@Override
public int compare(Map.Entry<String, Integer> o1, Map.Entry<String, Integer> o2) {
return o2.getValue() - o1.getValue();
}
});
list.forEach(entry -> System.out.println(entry.getKey() + " >>> " + entry.getValue()));
}
输出
11 >>> 1
13 >>> 1
04 >>> 2
2022 >>> 3
++++++++++++++++++++
2022 >>> 3
04 >>> 2
11 >>> 1
13 >>> 1
排序方式二:
public class Lambda4CollectionTest {
@Test
public void test17() {
Map<String, Integer> map = new HashMap<>();
// 词频统计
String content = "2022 04 13 2022 04 11 2022";
String[] words = content.split(" ");
for (String word : words) {
if (map.containsKey(word)){
Integer integer = map.get(word);
map.put(word, ++integer);
}else {
map.put(word, 1);
}
}
map.forEach((k, v) -> System.out.println(k + " >>> " + v));
System.out.println("++++++++++++++++++++");
Set<Map.Entry<String, Integer>> entrySet = map.entrySet();
ArrayList<Map.Entry<String, Integer>> list = new ArrayList<>();
Iterator<Map.Entry<String, Integer>> it = entrySet.iterator();
while (it.hasNext()) {
Map.Entry<String, Integer> entry = it.next();
list.add(entry);
}
list.sort((entry0, entry1) -> entry1.getValue() - entry0.getValue());
list.forEach(entry -> System.out.println(entry.getKey() + " >>> " + entry.getValue()));
}
}
输出
11 >>> 1
13 >>> 1
04 >>> 2
2022 >>> 3
++++++++++++++++++++
2022 >>> 3
04 >>> 2
11 >>> 1
13 >>> 1