-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathFilterAndCount.java
More file actions
109 lines (92 loc) · 3.97 KB
/
Copy pathFilterAndCount.java
File metadata and controls
109 lines (92 loc) · 3.97 KB
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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;
import java.util.stream.Collectors;
public class FilterAndCount {
// filter - возвращает stream, в котором есть только элементы, соответствующие условию фильтра
// count - возвращает количество элементов в стриме
// collect - преобразует stream в коллекцию или другую структуру данных
// mapToInt - преобразовать объект в числовой стрим (стрим, содержащий числа)
private static void testFilterAndCount() {
// ************ Работа со строками
Collection<String> collection = Arrays.asList("a1", "a2", "a3", "a1");
// Вернуть количество вхождений объекта
long count = collection
.stream()
.filter("a1"::equals)
.count();
System.out.println("count = " + count);
// Выбрать все элементы по шаблону
List<String> select = collection
.stream()
.filter((s) -> s.contains("1"))
.collect(Collectors.toList());
System.out.println("select = " + select);
// ************ Работа со сложными объектами
// Зададим коллекцию людей
Collection<People> people = Arrays.asList(
new People("Вася", 16, Sex.MAN),
new People("Петя", 23, Sex.MAN),
new People("Дима", 19, Sex.MAN),
new People("Елена", 42, Sex.WOMAN),
new People("Иван Иванович", 69, Sex.MAN)
);
// Выбрать мужчин-военообязанных
Collection<People> peopleWar = people
.stream()
.filter((p) -> p.getAge() >= 18 && p.getAge() < 27 && p.getSex() == Sex.MAN)
.collect(Collectors.toList());
System.out.println("peopleWar = " + peopleWar);
// Найти средний возраст среди мужчин
double manAverageAge = people
.stream()
.filter(p -> p.getSex() == Sex.MAN)
.mapToInt(People::getAge)
.average()
.getAsDouble();
System.out.println("manAverageAge = " + manAverageAge);
// Найти кол-во потенциально работоспосбных людей в выборке (т.е. от 18 лет и учитывая что женщины выходят в 55 лет, а мужчина в 60)
long peopleWhoCanWork = people
.stream()
.filter(p -> p.getAge() >= 18)
.filter(p -> (p.getSex() == Sex.WOMAN && p.getAge() <55) || (p.getSex() == Sex.MAN && p.getAge() < 60))
.count();
System.out.println("peopleWhoCanWork = " + peopleWhoCanWork);
}
private enum Sex {
MAN,
WOMAN
}
private static class People {
private final String name;
private final Integer age;
private final Sex sex;
public People(String name, Integer age, Sex sex) {
this.name = name;
this.age = age;
this.sex = sex;
}
public String getName() {
return name;
}
public Integer getAge() {
return age;
}
public Sex getSex() {
return sex;
}
@Override
public String toString() {
return "{" +
"name='" + name + '\'' +
", age=" + age +
", sex=" + sex +
'}';
}
}
public static void main(String[] args) {
testFilterAndCount();
}
}