タグ付けされた質問 「java-8」

このタグは、2014年3月18日にリリースされたJavaプラットフォームのバージョン8(内部番号1.8)であるJava 8に固有の質問に使用します。ほとんどの場合、javaタグも指定する必要があります。

7
Java 8ストリーム-収集と削減
いつcollect()vs を使用しreduce()ますか?誰かがどちらか一方に行く方が間違いなく良いときの良い具体的な例がありますか? Javadocは、collect()は変更可能な縮小であると述べています。 これは変更可能な削減であることを考えると、同期が(内部で)必要であり、その結果、パフォーマンスが低下する可能性があります。おそらくreduce()、reduceの各ステップの後に返すために新しいデータ構造を作成する必要があるという犠牲を払って、より容易に並列化できます。 上記のステートメントは当て推量ですが、ここでチャイムを鳴らす専門家が大好きです。
143 java  java-8  java-stream 

4
Java 8で型を変換するreduceメソッドにコンバイナーが必要なのはなぜですか
combinerStreams reduceメソッドで果たす役割を十分に理解できません。 たとえば、次のコードはコンパイルされません。 int length = asList("str1", "str2").stream() .reduce(0, (accumulatedInt, str) -> accumulatedInt + str.length()); コンパイルエラーは言う:( 引数の不一致; intはjava.lang.Stringに変換できません) しかし、このコードはコンパイルします: int length = asList("str1", "str2").stream() .reduce(0, (accumulatedInt, str ) -> accumulatedInt + str.length(), (accumulatedInt, accumulatedInt2) -> accumulatedInt + accumulatedInt2); 私はコンバイナーメソッドが並列ストリームで使用されていることを理解しています。つまり、私の例では、2つの中間累積整数を加算しています。 しかし、最初の例がコンバイナなしでコンパイルできない理由や、2つのintを加算するだけなので、コンバイナが文字列からintへの変換をどのように解決するのか理解できません。 誰かがこれに光を当てることができますか?
141 java  java-8  java-stream 

4
Java 8:ストリームとコレクションのパフォーマンス
Java 8は初めてです。APIの詳細はまだわかりませんが、新しい非公式のベンチマークを作成して、新しいStreams APIと古き良きコレクションのパフォーマンスを比較しました。 このテストでは、のリストをフィルタリングし、Integer偶数ごとに平方根を計算しての結果Listに格納しDoubleます。 これがコードです: public static void main(String[] args) { //Calculating square root of even numbers from 1 to N int min = 1; int max = 1000000; List<Integer> sourceList = new ArrayList<>(); for (int i = min; i < max; i++) { sourceList.add(i); } List<Double> result = new …

7
Java 8でラムダを使用してMap <K、V>を別のMap <K、V>に変換するにはどうすればよいですか?
私はJava 8を検討し始めたばかりで、ラムダを試してみるために、最近書​​いた非常に単純なものを書き直そうと思った。文字列から列へのマップを別の文字列から列へのマップに変換する必要があります。新しいマップの列は、最初のマップの列の防御コピーです。列にはコピーコンストラクタがあります。これまでのところ最も近いのは: Map&lt;String, Column&gt; newColumnMap= new HashMap&lt;&gt;(); originalColumnMap.entrySet().stream().forEach(x -&gt; newColumnMap.put(x.getKey(), new Column(x.getValue()))); しかし、もっと良い方法があるはずだと私は確信しており、アドバイスをいただければ幸いです。
140 java  map  lambda  java-8  java-stream 

3
Cloneableが非推奨にならないのはなぜですか?
CloneableJavaのインターフェースが壊れていることは一般的に理解されています。これには多くの理由がありますが、これについては触れません。他の人はすでにそれをしました。また、Javaアーキテクト自身の立場でもあります。 したがって、私の質問は次のとおりです。なぜまだ非推奨になっていないのですか?コアJavaチームが破損していると判断した場合は、廃止も検討しているはずです。そうすることに対する彼らの理由は何ですか(Java 8ではまだ非推奨ではありません)?

6
JavaではオプションのorElse
私はJava 8で新しいOptional型を使用していて、機能的にサポートされていない一般的な操作のように思われるものに遭遇しました:「orElseOptional」 次のパターンを考えてみます。 Optional&lt;Result&gt; resultFromServiceA = serviceA(args); if (resultFromServiceA.isPresent) return result; else { Optional&lt;Result&gt; resultFromServiceB = serviceB(args); if (resultFromServiceB.isPresent) return resultFromServiceB; else return serviceC(args); } このパターンには多くの形式がありますが、結局のところ、現在のものが存在しない場合にのみ呼び出される、新しいオプションを生成する関数を取るオプションの「orElse」が必要になります。 実装は次のようになります。 public Optional&lt;T&gt; orElse(Supplier&lt;Optional&lt;? extends T&gt;&gt; otherSupplier) { return value != null ? this : other.get(); } そのようなメソッドが存在しない理由があるのか​​、意図せずにOptionalを使用しているだけなのか、そしてこのケースに対処するために人々が他にどのようにしてきたのか、私は興味があります。 私のコードで作業している人々は必ずしもそれらが存在することを知っているとは限らないため、カスタムユーティリティクラス/メソッドを含むソリューションはエレガントではないと思います。 また、誰かが知っている場合、そのようなメソッドはJDK 9に含まれますか?また、どこでそのようなメソッドを提案できますか?これは、APIのかなりの省略のように思えます。
137 java  lambda  java-8  optional  java-9 

6
Javaストリームでは、デバッグのみを目的としていますか?
私はJavaストリームについて読んでいて、進むにつれて新しいものを発見しています。私が見つけた新しいものの1つはpeek()機能でした。私がピークで読んだほとんどすべては、それをストリームのデバッグに使用する必要があると述べています。 各アカウントにユーザー名、パスワードフィールド、login()メソッドとlogsIn()メソッドが含まれるストリームがある場合はどうなりますか。 私も持っています Consumer&lt;Account&gt; login = account -&gt; account.login(); そして Predicate&lt;Account&gt; loggedIn = account -&gt; account.loggedIn(); なぜこれがそんなに悪いのでしょうか? List&lt;Account&gt; accounts; //assume it's been setup List&lt;Account&gt; loggedInAccount = accounts.stream() .peek(login) .filter(loggedIn) .collect(Collectors.toList()); 今、私が知る限り、これは意図したとおりに動作します。それ; アカウントのリストを取得します 各アカウントへのログインを試みます ログインしていないアカウントを除外します ログインしたアカウントを新しいリストに収集します このようなことの欠点は何ですか?続行しない理由はありますか?最後に、このソリューションでない場合はどうなりますか? これの元のバージョンは、次のように.filter()メソッドを使用しました。 .filter(account -&gt; { account.login(); return account.loggedIn(); })
137 java  java-8  java-stream  peek 

2
IntelliJ IDEA Project SDKを設定する方法
IntelliJ IDEAをインストールしました。最初のプロジェクトを作成しようとすると、Project SDKをセットアップするように求められます。「JDK」をクリックすると、この画像に示すように、JDKのホームディレクトリを選択するように求められます。 どこにあるのかわからない。

6
JREまたはJDKがインストールされているかどうかを確認する方法
意図的にJDKをインストールしたコンピュータが1台あります。特にテスト用に、JREを備えた別のコンピュータを持っています。しかし、このコンピューターでJavaアプリケーションを動作させて別のコンピューターで試したところ、JDKが必要であると不満がありました。JDKが何らかの方法でシステムにインストールされているかどうかを確認するにはどうすればよいですか?注:問題のコンピューターはMacです。
134 java  macos  java-8 

1
Java 8 Streamを使用して、いくつかのクラスプロパティからリストを取得するにはどうすればよいですか?
私は持っていList&lt;Person&gt;ます。のListプロパティからを取得する必要がありますPerson。 たとえば、私はPersonクラスを持っています: class Person { private String name; private String birthDate; public String getName() { return name; } public String getBirthDate() { return birthDate; } Person(String name) { this.name = name; } } List&lt;Person&gt; personList = new ArrayList&lt;&gt;(); personList.add(new Person("David")); personList.add(new Person("Joe")); personList.add(new Person("Michel")); personList.add(new Person("Barak")); 次のStreamように、APIを使用して名前のリストを取得します。 List&lt;String&gt; names = …



5
Mavenを使用する場合に、より厳密なJava 8 Javadocを回避する方法
Javadocに関しては、JDK8の方が(デフォルトで)より厳密であることをすぐに理解できます。(リンク -最後の箇条書きを参照) Javadocを生成しない場合は、もちろん問題は発生しませんが、MavenリリースプロセスやCIビルドなどの問題が発生し、JDK7で正常に機能した場合に突然失敗します。Javadocツールの終了値をチェックするものはすべて失敗するようになりました。JDK8のJavadocはwarnings、JDK7 に比べておそらくもっと冗長ですが、ここでは範囲を広げません。私たちは話しているerrors! この質問は、それについて何をすべきかについての提案を収集するために存在します。最善のアプローチは何ですか?これらのエラーはソースコードファイルで一度だけ修正する必要がありますか?巨大なコードベースがある場合、これは多くの作業になる可能性があります。他にどのようなオプションがありますか? 以前失敗したことのある、今失敗したことについてのコメントも歓迎します。 今失敗するもののホラーストーリー wsimportツール wsimportツールは、Webサービスコンシューマーを作成するためのコードジェネレーターです。JDKに含まれています。wsimportJDK8 のツールを使用しても、JDK8 のjavadocコンパイラでコンパイルできないソースコードが生成されます。 @authorタグ 私は3〜4年前のソースコードファイルを開いて、次のように表示します。 /** * My very best class * @author John &lt;john.doe@mine.com&gt; */ これは、&lt;文字のために失敗します。厳密に言えばこれは正当化されますが、それほど寛容ではありません。 HTMLテーブル JavadocのHTMLテーブル?次の有効なHTMLを検討してください。 /** * * &lt;table&gt; * &lt;tr&gt; * &lt;td&gt;Col1&lt;/td&gt;&lt;td&gt;Col2&lt;/td&gt;&lt;td&gt;Col3&lt;/td&gt; * &lt;/tr&gt; * &lt;/table&gt; */ これはエラーメッセージで失敗しますno summary or caption for table。簡単な修正の1つは、次のようにすることです。 /** * * &lt;table …
133 java  maven  java-8 

5
Javaでは、ループよりもストリームの利点は何ですか?[閉まっている]
休業。この質問はもっと集中する必要があります。現在、回答を受け付けていません。 この質問を改善してみませんか?質問を更新して、この投稿を編集するだけで1つの問題に焦点を当てます。 3年前休業。 この質問を改善する 私はインタビューでこれを尋ねられました、そして私が私が持つことができる最良の答えを与えたと確信していません。並列検索を行うことができ、null値は私が覚えていない方法で処理されたと述べました。今、私はオプションを考えていたことがわかります。ここで何が欠けていますか?彼らはそれがより良いかより簡潔なコードであると主張していますが、私が同意するかどうかはわかりません。 それがどれほど簡潔に回答されたかを考えると、これは結局のところ、質問の幅が広すぎなかったようです。 彼らがインタビューでこの質問をしている場合、そして明らかにそうである場合、答えを見つけるのを難しくする以外に、それを破壊する目的は何ですか?つまり、何を探しているのですか?私は質問を分解してすべてのサブ質問に回答させることができますが、すべてのサブ質問へのリンクを含む親質問を作成します...しかしかなりばかげているようです。その間、あまり一般的でない質問の例を挙げてください。この質問の一部だけを尋ねても、意味のある答えを得る方法は知りません。同じ質問を別の方法で行うこともできます。たとえば、「ストリームにはどのような目的がありますか?」または「forループの代わりにストリームを使用するのはいつですか?」または「なぜforループの代わりにストリームを使用するのですか?」これらはすべてまったく同じ質問ですが。 ...または誰かが非常に長いマルチポイントの回答をしたため、広すぎると考えられますか?率直に言って、知っている人ならだれでも、事実上どんな質問でもそれを行うことができます。たとえば、あなたがたまたまJVMの作者の1人である場合、私たちのほとんどができなかった1日中forループについて話すことができます。 「質問を編集して、適切な回答を特定するのに十分な詳細のある特定の問題に限定してください。複数の個別の質問を一度に行うことは避けてください。この質問を明確にするために、質問ページを参照してください。」 以下に示すように、適切な回答が提供されており、1つあり、提供するのが簡単であることを証明しています。

1
Javaの「SAMタイプ」とは何ですか?
Java-8仕様を読んでいると、「SAMタイプ」への参照が頻繁に見られます。私はこれが何であるかについての明確な説明を見つけることができませんでした。 SAMタイプとは何ですか?また、使用される場合のシナリオ例は何ですか?
133 java  lambda  java-8 

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.