Java8 Stream
逕滓仙ヲ逅
stream繧、繝ウ繧ケ繧ソ繝ウ繧ケ
驟榊励°繧
Stream<String> stream1 = Stream.of("A", "B", "C", "D", "E");
Stream<String> stream2 = Arrays.stream(new String[] {"A", "B", "C", "D", "E"});
List縺九i
List<String> list = Arrays.asList("A","B","C","D","E");
Stream<String> stream3 = list.stream();
Map縺九i
Stream<Entry<String, Double>> map = exp.entrySet().stream();
謨ー蛟、遽蝗イ縺九i
IntStream stream = IntStream.range(1, 5);
stream.forEach( System.out::print );
1 2 3 4
IntStream stream = IntStream.rangeClosed(1, 5);
stream.forEach( System.out::print );
1 2 3 4 5
逶エ謗・荳ュ髢捺桃菴懊∫オらォッ謫堺ス
騾壼クク縺ッsteram繧、繝ウ繧ケ繧ソ繝ウ繧ケ螟画焚繧剃ス懈舌○縺壹√%縺ョ譁ケ豕輔r逕ィ縺繧
Arrays.asList("A","B","C","D","E").stream().forEach( ス )
荳ュ髢捺桃菴
map/flatMap
map
蜷隕∫エ縺ォ迚ケ螳壹ョ蜃ヲ逅繧定。後≧
Function蝙九Γ繧ス繝繝峨r莉九☆繧
List<String> list = Arrays.asList("A","B","C","D","E");
List<String> newList = new ArrayList<>();
for (String s : list) {
縲s = s + "+";
縲newList.add(s);
}
[A+, B+, C+, D+, E+]
List<String> newList = new ArrayList<>();
list.stream()
縲.map(s -> s + "+")
縲.forEach(s -> newList.add(s));
[A+, B+, C+, D+, E+]
flatMap
public class Language {縲
縲private String name;
縲private int exp;
縲public Language(String name, int exp) {
縲縲this.name = name;
縲縲this.exp = exp;
縲}
}
public class Group{
縲private List<Language> students = new ArrayList<>();
縲public List<Language> getStudents() {
縲縲return this.students;
縲}
縲public void addStudent(Language students) {
縲縲this.students.add(students);
縲}
}
List<Group> groupList = new ArrayList<>();
縲縲縲
Group group1 = new Group();
group1.addStudent(new Language("Java", 3));
group1.addStudent(new Language("VB.NET", 4));
group1.addStudent(new Language("C#", 2));
group1.addStudent(new Language("VB6", 2));
Group group2 = new Group();
group2.addStudent(new Language("php", 2));
group2.addStudent(new Language("python", 1));
groupList.add(group1);
groupList.add(group2);
List<List<Language>> map = groupList.stream().map(s -> s.getStudents())
縲.collect(Collectors.toList());
List<List<Language>>
笏納0]
縲笏猫anguage
縲縲笏馬ameシ哽ava
縲縲笏覇xpシ3
縲笏猫anguage
縲縲笏 ス
縲笏猫anguage
縲縲笏 ス
縲笏猫anguage
縲縲笏 ス
笏納1]
縲笏猫anguage
縲縲笏馬ameシ嗔hp
縲縲笏覇xpシ2
縲笏猫anguage
縲縲笏 ス
List<Language> flatMap = groupList.stream().flatMap(s -> s.getStudents().stream())
縲.collect(Collectors.toList());
List<Language>
笏猫anguage
縲笏馬ameシ哽ava
縲笏覇xpシ3
笏猫anguage
縲笏 ス
笏猫anguage
縲笏 ス
笏猫anguage
縲笏 ス
笏猫anguage
縲笏馬ameシ嗔hp
縲笏覇xpシ2
笏猫anguage
縲笏 ス
mapToInt
OptionalInt min = Arrays.asList(“Java”, “PHP”, “C#”).stream()
縲.mapToInt(x -> x.length()).min();
min.getAsInt()シ2
OptionalInt max = Arrays.asList(“Java”, “PHP”, “C#”).stream()
縲.mapToInt(x -> x.length()).max();
max.getAsInt()シ4
filter
譚。莉カ繧呈コ縺溘☆隕∫エ繧帝∈蛻・
Predicate蝙九Γ繧ス繝繝峨r莉九☆繧
窶サPredicate縺荊rue繧定ソ斐☆
Integer[] list = {1, 2, 3, 4, 5, 6 };
Predicate<Integer> isThree = (i) -> { return i % 3 == 0; };
lists.stream()
縲.filter(isThree)
縲.forEach(System.out::println);
竊 3 6
縺セ縺ィ繧√※譖ク縺縺溷エ蜷
Arrays.stream(list).filter((i) -> { return i % 3 == 0; }).forEach(System.out::println);
limit
List<String> list = Arrays.asList("A","B","C","D","E");
List<String> newList = new ArrayList<>();
list.stream()
縲.limit(3)
縲.forEach(s -> newList.add(s));
[A, B, C]
sorted
List<String> list = Arrays.asList("E","D","C","B","A");
List<String> newList = new ArrayList<>();
list.stream()
縲.sorted()
縲.forEach(s -> newList.add(s));
[E, D, C, B, A]
邨らォッ謫堺ス
forEach
Stream
List<String> language = Arrays.asList("Java", "C#", "PHP", "Python");
language.stream().forEach( s -> {
縲System.out.println(s);
});
Java C# PHP Python
Map
Map<String, Integer> exp = new HashMap<>();
exp.put("Java", 3);
exp.put("C#", 2);
exp.put("PHP", 3);
exp.put("Python", 1);
exp.forEach((key, value) -> {
縲System.out.println(key + ":" + value);
});
C#:2 Java:2 PHP:1 Python:1
collect
Collectors.toList
List縺ク螟画鋤
List<String> list = Arrays.asList("E","D","C","B","A");
List<String> newList =
list.stream()
縲.sorted()
縲.collect(Collectors.toList());
[E, D, C, B, A]
Collectors.joining
譁蟄怜励→縺励※邨仙粋
String s =
縲list.stream()
縲.sorted()
縲.collect(Collectors.joining());
ABCDE
Collectors.groupingBy
髮邏
List<Language> languages = new ArrayList<>();
languages.add(new Language("Java", 3));
languages.add(new Language("C#", 2));
languages.add(new Language("php", 2));
languages.add(new Language("python", 1));
謌サ繧雁、縺ッMap蝙
Map<Integer, List<Language>> map = languages.stream().collect(Collectors.groupingBy(i -> i.getExp()));
Map<Integer, List<Language>>
笏納0]
縲笏婆eyシ1
縲笏牌alue
縲縲笏猫anguage
縲縲縲笏馬ameシ哽ava
縲縲縲笏覇xpシ3
笏納1]
縲笏婆eyシ2
縲笏牌alue
縲縲笏猫anguage
縲縲縲笏馬ameシ啀HP
縲縲縲笏覇xpシ2
縲縲笏猫anguage
縲縲縲笏 ス
縲縲PHP縺ィC#縺碁寔邏縺輔l繧
笏納2]
縲笏婆eyシ3
縲笏牌alue
縲縲笏猫anguage
縲縲縲笏 ス
髮邏縺励◆List縺九i蛟、繧貞叙蠕
List<Language> list = map.get(2);
List<Language>
Language
縲笏馬ameシ啀HP
縲笏覇xpシ2
Language
縲笏馬ameシ咾#
縲笏覇xpシ2
Collectors.counting
List<String> language = Arrays.asList("Java", "C#", "PHP", "C#", "Python", "Java");
language蜀縺ョ隕∫エ縺ァ髮邏縲∝酔蛟、縺ョ隕∫エ謨ー繧貞叙蠕
Map<String, Long> counter = language.stream().collect(Collectors.groupingBy(s -> s, Collectors.counting()));
counter.forEach((key, value) -> {
縲System.out.println(key + ":" + value);
});
C#:2 Java:2 PHP:1 Python:1
Match
anyMatch
List<String> list = Arrays.asList("A", "B", "C", "D", "E");
Boolean isMatch = list.stream().anyMatch(s -> s.equals("C"));
isMatch:true
Boolean isMatch = list.stream().anyMatch(s -> s.equals("Z"));
isMatch:false
allMatch
List<String> list = Arrays.asList("A", "B", "C", "D", "E");
Boolean isMatch = list.stream().allMatch(s -> s.length() == 1 );
isMatch:true
Boolean isMatch = list.stream().allMatch(s -> s.length() == 2 );
isMatch:false
noneMatch
List<String> list = Arrays.asList("A", "B", "C", "D", "E");
Boolean isExist = list.stream().noneMatch(s -> s.equals("Z"));
isExist:true
Boolean isExist = list.stream().noneMatch(s -> s.equals("C"));
isExist:false
謚ス蜃コ
findFirst
Optional<Integer> list = Arrays.asList(1, 2, 3, 5, 6).stream().findFirst();
list.get()シ1
findAny
Optional<Integer> list = Arrays.asList(1, 2, 3, 5, 6).stream().findAny();
list.get()シ1
min
Optional<Integer> list = Arrays.asList(1, 2, 3, 5, 6).stream().min(Comparator.naturalOrder());
list.get()シ1
max
Optional<Integer> list = Arrays.asList(1, 2, 3, 5, 6).stream().max(Comparator.naturalOrder());
list.get()シ6
髮險
count
long ret = Arrays.asList(1,2,3,5,7).stream().mapToInt(x -> x).count();
retシ5
sum
int ret = Arrays.asList(1, 2, 3, 5, 6).stream().mapToInt(x -> x).sum();
retシ17
average
OptionalDouble ret = Arrays.asList(1, 2, 3, 5, 6).stream().mapToInt(x -> x).average();
ret.getAsDouble()シ3.4