Java 8の新しい特性学習Lambda式とStreamの使用例
5571 ワード
Java 8の新しい特性学習Lambda式とStreamの使用例
学習参考資料:https://www.cnblogs.com/coprince/p/8692972.html
1.lambdaエージェントを使用した匿名の内部クラス
出力結果:
2.lambda式を使用してリストを反復
出力結果
3.lambda式と関数式インタフェースPredicateを使用する
出力結果:
4.lambda式を使用し、複数のPredicateを追加
出力結果:
5.lambda式を使用したMapの例
出力結果:
6.lambda式を使用したReduceの例
出力結果:
7.フィルタリングによるStringリストの作成
出力結果:
8.リストの各要素に関数を適用する
出力結果:
9.distinct()重量除去
出力結果:
10.最大最小値合計平均値の計算
出力結果:
学習参考資料:https://www.cnblogs.com/coprince/p/8692972.html
1.lambdaエージェントを使用した匿名の内部クラス
// lambda
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("java 8 lambda ");
}
}).start();
// lambda
new Thread(()->{
System.out.println("java 8 lambda ");
}).start();
出力結果:
java 8 lambda
java 8 lambda
2.lambda式を使用してリストを反復
// lambda
List strings = Arrays.asList("java", "go", "python", "php");
for (String string : strings) {
System.out.print(string+"\t");
}
System.out.println();
// lambda
strings.forEach((str) -> System.out.print(str+"\t"));
出力結果
java go python php
java go python php
3.lambda式と関数式インタフェースPredicateを使用する
// lambda
ArrayList users = new ArrayList<>();
users.add(new User("xiaoming",23));
users.add(new User("daming",26));
Collections.sort(users, new Comparator() {
@Override
public int compare(User o1, User o2) {
return o1.getAge().compareTo(o2.getAge());
}
});
for (User user : users) {
System.out.println(user);
}
// lambda
Collections.sort(users,(o1,o2)->{
return o1.getAge().compareTo(o2.getAge());
});
users.forEach(System.out::println);
出力結果:
User{name='xiaoming', age=23}
User{name='daming', age=26}
User{name='xiaoming', age=23}
User{name='daming', age=26}
4.lambda式を使用し、複数のPredicateを追加
// Predicate and or
List languages2 = Arrays.asList("Java", "Scala", "C++", "Haskell", "Lisp");
Predicate predicate1 = (n) -> n.startsWith("S");
Predicate predicate2 = (m) -> m.endsWith("l");
languages2.stream().filter(predicate1.or(predicate2)).forEach((n) -> {
System.out.println(n);
});
出力結果:
Java
Scala
Haskell
5.lambda式を使用したMapの例
// map
// lambda
Integer[] price = {100,200,300,400};
List prices = Arrays.asList(price);
for (Integer dou : prices) {
System.out.println(dou + .12 * dou);
}
System.out.println(" lambda:");
prices.stream().map((num) -> (.12*num+num)).forEach((n)->{
System.out.println(n);
});
出力結果:
112.0
224.0
336.0
448.0
lambda:
112.0
224.0
336.0
448.0
1120.0
6.lambda式を使用したReduceの例
// reduce
// lambda
Integer[] price2 = {100,200,300,400};
List integers2 = Arrays.asList(price);
Double total = 0d;
for (Integer integer : integers2) {
total += integer + .12 * integer;
}
System.out.println(total);
System.out.println(" lambda");
Double aDouble = integers2.stream().map((num) -> (num + .12 * num)).reduce((total1, total2) -> total1 + total2).get();
System.out.println(aDouble);
出力結果:
1120.0
lambda
1120.0
7.フィルタリングによるStringリストの作成
List languages3 = Arrays.asList("Java", "Scala", "C++", "Haskell", "Lisp");
List collect = languages3.stream().filter(x -> x.length() > 4).collect(Collectors.toList());
System.out.println(collect);
出力結果:
[Scala, Haskell]
8.リストの各要素に関数を適用する
// collect(Collectors.joining(", "));
List languages4 = Arrays.asList("Java", "Scala", "C++", "Haskell", "Lisp");
String collect2 = languages4.stream().map(x -> (x.toUpperCase())).collect(Collectors.joining(","));
System.out.println(collect2);
出力結果:
JAVA,SCALA,C++,HASKELL,LISP
9.distinct()重量除去
// distinct()
Integer[] aaa = {1,1,2,2,3,3,4,5,6,1,23,44,32};
List integers1 = Arrays.asList(aaa);
List collect3 = integers1.stream().distinct().collect(Collectors.toList());
System.out.println(collect3);
出力結果:
[1, 2, 3, 4, 5, 6, 23, 44, 32]
10.最大最小値合計平均値の計算
//
IntSummaryStatistics intSummaryStatistics = integers1.stream().mapToInt(x -> x).summaryStatistics();
System.out.println(intSummaryStatistics.getCount());
System.out.println(intSummaryStatistics.getAverage());
System.out.println(intSummaryStatistics.getMax());
System.out.println(intSummaryStatistics.getMin());
System.out.println(intSummaryStatistics.getSum());
出力結果:
13
9.76923076923077
44
1
127