###前提・実現したいこと
ラムダ式、StreamAPIを用いて以下の機能を実装したいと考えております。
・引数のリストから最大値の取得
・引数のリストから特定の文字を表示させる
・引数のリストから偶数のみを格納したリストを返す
・引数のリストから重複している要素を
排除したハッシュセットを返す
・引数の年月日から半年前の年月日を返す
###発生している問題
・引数のリストから最大値を取得させるところの
Optional<Integer> max = intLits.max(Comparator.naturalOrder());
のintLits.maxのmaxのところで
The method max(Comparator.naturalOrder()) is undefined for the type List<Integer>
というエラーが出てしまい対処法が不明
・特定の文字を抽出させる方法が不明
・偶数のみを格納したリストを
結果用のリストに格納させたいが
(i -> resultList.add(i));のところで
Multiple markers at this line
- Syntax error, insert "AssignmentOperator Expression" to complete
Expression
- Syntax error, insert ")" to complete Expression
というエラーが出てしまい対処に困っている
・引数の月から半年前の日付を表示させる方法(関数)が不明
追加事項:
forEachとstrListにおいて
- Void methods cannot return a value
- The method forEach(Consumer<? super String>) in the type Stream<String> is not
applicable for the arguments ((<no type> str) -> {})
というエラーが発生してしまいました。
// 引数の年月日から6ヵ月前の年月日を返すところで
LocalDateクラスのminusMonthsメソッドを使用してみたのですが
tring resultDate = LocalDate.parse(strDate, DateTimeFormatter.ofPattern("yyyy-MM-dd"))のところで
以下のエラーが発生してしまいました。
Type mismatch: cannot convert from LocalDate to String
どちらもエラーの対処法と
コードの訂正法を教えていただきたいです。
なるべく早く実装させたいので宜しくお願いします。
###該当のソースコード
public class Answer {
// 引数のリストから最大値を取得する
private Integer task1(List<Integer> intLits) {
//optionalクラス値を持てるクラス(nullCheckを省略(?))
//comparator=関数型のインターフェース(ここでは最大値取得を定義(?))
Optional<Integer> max = intLits.max(Comparator.naturalOrder());
return max.get();
}
// 引数のリストから重複している要素を除外したリストを返す
private List<String> task4(List<String> strList) {
List<String> resultList = new ArrayList<>();
strList.stream().distinct() // 要素をequalsで比較し、重複した要素を除く
.forEach(str -> strList); // 結果用リストに格納
// 引数のリストから「晴れ」のみを表示する
private void task2(List<String> strList) {
strList.stream().filter(str -> str) // リストの中から"晴れ"のみを抽出
.forEach(System.out::println); // 要素の出力
}
// 引数のリストから偶数のみを格納したリストを返す
private List<Integer> task3(List<Integer> intList) {
List<Integer> resultList = new ArrayList<>();
intList.stream().filter(i -> i % 2 == 0); // 要素を2で割って余りが0の要素を抽出
(i -> resultList.add(i)); // 結果用リストに格納
// 結果用のリストを返却する
return resultList;
}
// 引数のリストから重複している要素を除外したリストを返す
private List<String> task4(List<String> strList) {
List<String> resultList = new ArrayList<>();
strList.stream().distinct() // 要素をequalsで比較し、重複した要素を除く
.forEach(str -> strList); // 結果用リストに格納
// 結果用のリストを返却する
return resultList;
}
// 引数の年月日から6ヵ月前の年月日を返す(変更前)
private String task5(String strDate) {
String resultDate = LocalDate.parse(strDate, DateTimeFormatter.ofPattern("yyyy-MM-dd")) // 文字列から日付へ変換する
// 月から6を引く
.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); // 引数の書式で文字列に再変換する
return resultDate;
}
/
// 引数の年月日から6ヵ月前の年月日を返す(変更後)
private String task5(String strDate) {
String resultDate = LocalDate.parse(strDate, DateTimeFormatter.ofPattern("yyyy-MM-dd")) // 文字列から日付へ変換する
// 月から6を引く
LocalDate.of(2016,06,26).minusMonths(-6)
.format(DateTimeFormatter.ofPattern("yyyy-MM-dd")); // 引数の書式で文字列に再変換する
return resultDate;
}
//実行時のコード
// strListの中から一意の要素を取り出す
System.out.println(answer.task4(strList));
// 6ヵ月前の年月日を表示する System.out.println(answer.task5("2016-06-26"));
###試したこと
参考書やサイトを見ながら自分なりに実装
###補足情報(言語/FW/ツール等のバージョンなど)
使用言語:Java
使用ツール:STS
使用OS:Windows10
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2016/06/25 20:40
2016/06/26 00:08
退会済みユーザー
2016/06/26 00:32