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

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


7
ストリームを使用してマップを作成するときに重複を無視する
Map<String, String> phoneBook = people.stream() .collect(toMap(Person::getName, Person::getAddress)); java.lang.IllegalStateException: Duplicate key重複する要素が見つかったときに取得します。 マップに値を追加する際に、このような例外を無視することは可能ですか? 重複がある場合は、重複するキーを無視して続行する必要があります。
257 java  java-8  java-stream 

4
InstantDateとLocalDateTimeの違いは何ですか?
そんなこと知ってる: インスタントは、計算のための「技術的な」タイムスタンプ表現(ナノ秒)です。 LocalDateTimeは、人間のタイムゾーンを含む日付/時計の表現です。 結局のところ、IMOはどちらもほとんどのアプリケーションのユースケースで型として使用できます。例:現在、バッチジョブを実行していますが、日付に基づいて次の実行を計算する必要があり、これら2つのタイプ間の長所/短所を見つけるのに苦労しています(インスタントおよびタイムゾーン部分のナノ秒精度の利点は別として) LocalDateTimeの)。 InstantまたはLocalDateTimeのみを使用する必要があるアプリケーションの例を挙げてください。 編集:精度とタイムゾーンに関するLocalDateTimeの誤ったドキュメントに注意してください
256 java  datetime  java-8 

13
Java 8で2つの日付間の日数を計算する
取得する方法についてSOに多くの質問があることを知っていますが、新しいJava 8 Date APIを使用して例を求めています。JodaTimeライブラリも知っていますが、外部ライブラリを使用せずに作業できる方法を求めています。 関数は次の制限に準拠する必要があります。 日付の保存時間によるエラーを防止 入力は2つのDateオブジェクトです(時間なし、localdatetimeは知っていますが、日付インスタンスを使用する必要があります)。

12
MacからのJava 8 JDKの削除
そこで、JDK 8のベータ版を少し前にインストールして、いくつかの例を見てみました。今では確かに、バージョン間での変更は簡単だと思いました。 IntelliJを使用してPlay開発を行う。何らかの理由で、IntelliJは8でコンパイルしていますが、 設定でコンパイラを1.6に設定しました おそらく、外部ビルドを通じてSBTを使用していますが、コマンドラインからのsbtは機能します JAVA_HOMEはJDK 6を指しています。 Javaの[設定]ページに移動すると、8がインストールされていると表示されますが、アンインストールするオプションがなく、他のバージョンは表示されません。 私がするときwhich java、それは私に教えてくれ/usr/bin/java、私はそうし/usr/bin/java -version、それは1.6を返します。 注:少し手を加えると、IntelliJとJDK7を使用できます。こちらを参照してください。

4
Javaでデフォルトのメソッドを明示的に呼び出す
Java 8では、既存の実装を変更せずにインターフェースを拡張する機能を提供するデフォルトのメソッドが導入されています。 メソッドがオーバーライドされている場合、または異なるインターフェイスでデフォルト実装が競合しているために使用できない場合に、メソッドのデフォルト実装を明示的に呼び出すことができるかどうか疑問に思います。 interface A { default void foo() { System.out.println("A.foo"); } } class B implements A { @Override public void foo() { System.out.println("B.foo"); } public void afoo() { // how to invoke A.foo() here? } } 上記のコードを考慮してA.foo()、クラスBのメソッドからどのように呼び出しますか?

3
Iterable <T>がstream()およびparallelStream()メソッドを提供しないのはなぜですか?
Iterableインターフェイスがstream()and parallelStream()メソッドを提供しないのはなぜですか。次のクラスについて考えてみます。 public class Hand implements Iterable&lt;Card&gt; { private final List&lt;Card&gt; list = new ArrayList&lt;&gt;(); private final int capacity; //... @Override public Iterator&lt;Card&gt; iterator() { return list.iterator(); } } トレーディングカードゲームのプレイ中にカードを手にできるので、これはハンドの実装です。 基本的にはをラップしList&lt;Card&gt;、最大容量を確保し、その他の便利な機能をいくつか提供します。として直接実装するよりも優れていList&lt;Card&gt;ます。 さて、便宜上、を実装した方がいいと思ったのでIterable&lt;Card&gt;、ループを拡張したい場合は拡張forループを使用できます。(私のHandクラスもget(int index)メソッドを提供しているため、Iterable&lt;Card&gt;私の意見では正当化されます。) Iterableインターフェースは、(Javadocを除外)以下を提供します: public interface Iterable&lt;T&gt; { Iterator&lt;T&gt; iterator(); default void forEach(Consumer&lt;? super T&gt; action) { Objects.requireNonNull(action); for (T …

3
Java 8ラムダ、Function.identity()またはt-> t
OverаэтотвопросестьответынаStack Overflowнарусском:JavaямбдывJava 8、чтолучшеиспользовать-Function.identity()илиt-&gt; t? Function.identity()メソッドの使い方について質問があります。 次のコードを想像してみてください: Arrays.asList("a", "b", "c") .stream() .map(Function.identity()) // &lt;- This, .map(str -&gt; str) // &lt;- is the same as this. .collect(Collectors.toMap( Function.identity(), // &lt;-- And this, str -&gt; str)); // &lt;-- is the same as this. Function.identity()代わりにstr-&gt;str(またはその逆に)使用する理由はありますか?2番目のオプションの方が読みやすいと思います(もちろん、好みの問題です)。しかし、人が好まれるべき「本当の」理由はありますか?

12
Stream :: flatMapでのJava 8のオプションの使用
新しいJava 8ストリームフレームワークとその仲間は、非常に簡潔なJavaコードを作成しますが、簡潔に行うのが難しい一見シンプルな状況に遭遇しました。 List&lt;Thing&gt; thingsとメソッドを検討してくださいOptional&lt;Other&gt; resolve(Thing thing)。ThingsをOptional&lt;Other&gt;s にマップして、最初のを取得しOtherます。明白な解決策はを使用することですが、ストリームを返す必要things.stream().flatMap(this::resolve).findFirst()がflatMapありOptional、stream()メソッドがない(またはCollectionそれをに変換するか、それをとして表示するメソッドを提供するCollection) 私が思いつくことができる最高のものはこれです: things.stream() .map(this::resolve) .filter(Optional::isPresent) .map(Optional::get) .findFirst(); しかし、それは非常に一般的なケースのように思えるので、ひどく長い時間のように思えます。誰かがより良いアイデアを持っていますか?

5
Java Streamsが一度オフになるのはなぜですか?
C#とは異なりIEnumerable、実行パイプラインは何度でも実行できますが、Javaではストリームを1回だけ「反復」できます。 端末操作を呼び出すと、ストリームが閉じて使用できなくなります。この「機能」は多くの力を奪います。 これの理由は技術的ではないと思います。この奇妙な制限の背後にある設計上の考慮事項は何でしたか? 編集:私が話していることを示すために、C#でのQuick-Sortの次の実装を検討してください。 IEnumerable&lt;int&gt; QuickSort(IEnumerable&lt;int&gt; ints) { if (!ints.Any()) { return Enumerable.Empty&lt;int&gt;(); } int pivot = ints.First(); IEnumerable&lt;int&gt; lt = ints.Where(i =&gt; i &lt; pivot); IEnumerable&lt;int&gt; gt = ints.Where(i =&gt; i &gt; pivot); return QuickSort(lt).Concat(new int[] { pivot }).Concat(QuickSort(gt)); } 確かに、これがクイックソートの適切な実装であることを私は主張していません。ただし、これは、ラムダ式とストリーム操作を組み合わせた表現力の優れた例です。 そして、それはJavaではできません!ストリームを使用不可にすることなく、ストリームが空かどうかを確認することもできません。

4
Java 8ストリーム:複数のフィルターと複雑な条件
Stream複数の条件でaをフィルタリングしたい場合があります。 myList.stream().filter(x -&gt; x.size() &gt; 10).filter(x -&gt; x.isCool()) ... または、複雑な条件と単一の 条件で同じことを行うことができますfilter: myList.stream().filter(x -&gt; x.size() &gt; 10 &amp;&amp; x -&gt; x.isCool()) ... 2つ目のアプローチの方がパフォーマンス特性は優れていると思いますが、それはわかりません。 最初のアプローチは読みやすさで勝ちますが、パフォーマンスのために何が良いですか?

4
Optional.ofNullableではなくOptional.ofを使用する理由
Java 8 Optionalクラスを使用する場合、オプションで値をラップする方法は2つあります。 String foobar = &lt;value or null&gt;; Optional.of(foobar); // May throw NullPointerException Optional.ofNullable(foobar); // Safe from NullPointerException をOptional.ofNullable使用する唯一の安全な方法は理解できるが、OptionalなぜOptional.of存在するのか。Optional.ofNullable 常に使用して、常に安全な側にいませんか?

19
Javaストリームを1つだけの要素にフィルターする
Java 8を使用Streamしての要素を検索しようとしていますLinkedList。ただし、フィルター条件に一致するのは1つだけであることを保証したいと思います。 このコードを取ります: public static void main(String[] args) { LinkedList&lt;User&gt; users = new LinkedList&lt;&gt;(); users.add(new User(1, "User1")); users.add(new User(2, "User2")); users.add(new User(3, "User3")); User match = users.stream().filter((user) -&gt; user.getId() == 1).findAny().get(); System.out.println(match.toString()); } static class User { @Override public String toString() { return id + " - " + username; …

6
JDK 8でのPermGenの削除
JDK 8をインストールし、Eclipseを実行しようとしています。次の警告メッセージが表示されます。 Java HotSpot(TM) 64-Bit Server VM warning: ignoring option MaxPermSize=512m; support was removed in 8.0 このVMオプションを無視する理由は何ですか?
229 java  java-8  jvm  permgen 

23
JDK8でのWebServiceクライアント生成エラー
プロジェクトでWebサービスを使用する必要があります。NetBeansを使用しているので、プロジェクトを右クリックし、新しい「Webサービスクライアント」を追加しようとしました。前回確認したところ、これがWebサービスクライアントを作成する方法でした。しかし、その結果、AssertionErrorが発生しました。 java.lang.AssertionError:org.xml.sax.SAXParseException; systemId:jar:file:/path/to/glassfish/modules/jaxb-osgi.jar!/com/sun/tools/xjc/reader/xmlschema/bindinfo/binding.xsd; lineNumber:52; columnNumber:88; schema_reference:スキーマドキュメント ' xjc.xsd 'の読み取りに失敗しました。accessExternalSchemaプロパティで設定された制限のため、 'file'アクセスが許可されていません。 NetBeansのデフォルトのJavaプラットフォームはJDK8(Oracleの公式バージョン)だったので、netbeans.confファイルを変更してJDK7(Oracleからも)をデフォルトにすると、すべて正常に動作しました。したがって、問題はJDK8にあると思います。これが私のjava -version出力です: Javaバージョン "1.8.0" Java(TM)SEランタイム環境(ビルド1.8.0-b132) Java HotSpot(TM)64ビットサーバーVM(ビルド25.0-b70、混合モード) 今のところ、デフォルトのJavaプラットフォームとしてJDK7を使用しています。JDK8を動作させる方法がある場合は、共有してください。

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