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

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

5
Java8:java.lang.Objectからメソッドのデフォルトメソッドを定義することが禁じられているのはなぜですか
デフォルトのメソッドは、Javaツールボックスの優れた新しいツールです。しかし、私はを定義するインターフェイスを書いてみましたdefaulttoStringメソッドのバージョン。で宣言されたメソッドは編集java.lang.Objectできない可能性があるため、これは禁止されているとJavaは教えてくれdefaultます。これはなぜですか? 「基本クラスは常に勝つ」というルールがあることを知っているので、デフォルトでは(pun;)、 defaultObjectメソッドの実装はObjectとにかくメソッドによって上書きされます。ただし、Object仕様に記載されているメソッドの例外が存在してはならない理由はありません。特にtoString、デフォルトの実装があると非常に便利です。 それで、Javaデザイナーが許可しないことに決めた理由は何ですか defaultメソッドをオーバーライドメソッドをObjectですか?


5
Java 7コンパイル済みコードをJava 8にアップグレードするメリットはありますか?
Java 7を使用して作成された古いアプリケーションがあります。Java8 JREで正常に実行されます。Java 8の機能を利用するためにコードを書き直すつもりはありません。コンパイルされたコードを最新のJava 8 JDKにアップグレードすることに技術的なメリットはありますか? 明確にするために、コードは現在Java 7でコンパイルされており、最新のJava 8 JREですでに実行されています。Java 8ランタイムの改善によるメリットがすでに得られているはずです。この質問は、バージョン8でコンパイルし、Java 8コンパイル済みバイトコードで実行することにより、どのような利点が得られるかということです。 また、開発者の生産性などの技術的ではないメリットについても心配していません。これらは重要だと思いますが、この質問の要点ではありません。開発チームのいない本番用コードを求めています。純粋にメンテナンスモードです。
127 java  performance  java-8 


4
ストリームでJava 8 foreachループを使用して次のアイテムに移動する
ループ内の次の項目に移動しようとするJava 8 foreachのストリームに問題があります。コマンドをのようcontinue;に設定することはできません。return;機能するだけですが、この場合はループを終了します。ループの次の項目に移動する必要があります。どうやってやるの? 例(機能しない): try(Stream<String> lines = Files.lines(path, StandardCharsets.ISO_8859_1)){ filteredLines = lines.filter(...).foreach(line -> { ... if(...) continue; // this command doesn't working here }); } 例(動作): try(Stream<String> lines = Files.lines(path, StandardCharsets.ISO_8859_1)){ filteredLines = lines.filter(...).collect(Collectors.toList()); } for(String filteredLine : filteredLines){ ... if(...) continue; // it's working! }
126 java  java-8 


10
ストリームをコピーして、「ストリームはすでに操作されているか、閉じられています」
2回処理できるように、Java 8ストリームを複製したいと思います。私ができるcollectことから、新たなストリームを取得し、リストのように。 // doSomething() returns a stream List<A> thing = doSomething().collect(toList()); thing.stream()... // do stuff thing.stream()... // do other stuff しかし、もっと効率的でエレガントな方法があるべきだと思います。 コレクションに変換せずにストリームをコピーする方法はありますか? 私は実際にはEithersのストリームで作業しているので、右のプロジェクションに移動して別の方法で処理する前に、左のプロジェクションを1つの方法で処理したいとします。このようなもの(これまでのところ、私はtoListトリックを使用することを余儀なくされています)。 List<Either<Pair<A, Throwable>, A>> results = doSomething().collect(toList()); Stream<Pair<A, Throwable>> failures = results.stream().flatMap(either -> either.left()); failures.forEach(failure -> ... ); Stream<A> successes = results.stream().flatMap(either -> either.right()); successes.forEach(success -> ... );

3
Java8でタイムゾーンを使用してLocalDateTimeをフォーマットする
私はこの簡単なコードを持っています: DateTimeFormatter FORMATTER = DateTimeFormatter.ofPattern("yyyyMMdd HH:mm:ss.SSSSSS Z"); LocalDateTime.now().format(FORMATTER) 次に、次の例外が発生します。 java.time.temporal.UnsupportedTemporalTypeException: Unsupported field: OffsetSeconds at java.time.LocalDate.get0(LocalDate.java:680) at java.time.LocalDate.getLong(LocalDate.java:659) at java.time.LocalDateTime.getLong(LocalDateTime.java:720) at java.time.format.DateTimePrintContext.getValue(DateTimePrintContext.java:298) at java.time.format.DateTimeFormatterBuilder$OffsetIdPrinterParser.format(DateTimeFormatterBuilder.java:3315) at java.time.format.DateTimeFormatterBuilder$CompositePrinterParser.format(DateTimeFormatterBuilder.java:2182) at java.time.format.DateTimeFormatter.formatTo(DateTimeFormatter.java:1745) at java.time.format.DateTimeFormatter.format(DateTimeFormatter.java:1719) at java.time.LocalDateTime.format(LocalDateTime.java:1746) この問題を解決するには?
121 java  java-8  java-time 

3
基準に一致する最初の要素を取得します
ストリームの基準に一致する最初の要素を取得するにはどうすればよいですか?私はこれを試しましたが動作しません this.stops.stream().filter(Stop s-> s.getStation().getName().equals(name)); その基準が機能しておらず、フィルターメソッドがStop以外のクラスで呼び出されています。 public class Train { private final String name; private final SortedSet<Stop> stops; public Train(String name) { this.name = name; this.stops = new TreeSet<Stop>(); } public void addStop(Stop stop) { this.stops.add(stop); } public Stop getFirstStation() { return this.getStops().first(); } public Stop getLastStation() { return this.getStops().last(); } …
121 java  java-8  java-stream 

9
ラムダ式には、コード行を保存する以外の用途がありますか?
ラムダ式には、コード行を保存する以外の用途がありますか? 簡単に解決できない問題を解決するラムダの特別な機能はありますか?私が見た典型的な使用法はこれを書く代わりに: Comparator<Developer> byName = new Comparator<Developer>() { @Override public int compare(Developer o1, Developer o2) { return o1.getName().compareTo(o2.getName()); } }; ラムダ式を使用してコードを短縮できます。 Comparator<Developer> byName = (Developer o1, Developer o2) -> o1.getName().compareTo(o2.getName());
120 java  lambda  java-8 

4
CompletableFuture | thenApply vs thenCompose
thenApply()との違いを理解できませんthenCompose()。 それで、誰かが有効なユースケースを提供できますか? Javaドキュメントから: thenApply(Function<? super T,? extends U> fn) CompletionStageこのステージが正常に完了すると、指定された関数の引数としてこのステージの結果を使用して実行される新しいを返します。 thenCompose(Function<? super T,? extends CompletionStage<U>> fn) CompletionStageこのステージが正常に完了すると、指定された関数の引数としてこのステージを使用して実行される新しいを返します。 の2番目の引数がthenComposeCompletionStage を拡張していて、拡張してthenApplyいないことがわかります。 誰かが私が使用thenApplyしなければならない場合の例を提供できthenComposeますか?

6
Java 8で2つの矢印の付いたラムダは何を意味しますか?
以前にいくつかのJava 8チュートリアルを読んだことがあります。 今、私は次のトピックに遭遇しました: Javaはカリー化をサポートしていますか? ここでは、次のコードが表示されます。 IntFunction<IntUnaryOperator> curriedAdd = a -> b -> a + b; System.out.println(curriedAdd.apply(1).applyAsInt(12)); この例では2つの要素を合計することを理解していますが、構造を理解できません。 a -> b -> a + b; 式の左側によると、この行は次の関数を実装する必要があります。 R apply(int value); これの前に、私は1つの矢だけでラムダに会いました。
118 java  lambda  java-8  currying 

3
PermGenとMetaspaceの違いは何ですか?
Java 7までは、JVM がクラスを保持するために使用していたPermGenと呼ばれる領域がJVMメモリにありました。Java 8、それを除去し、と呼ばれる領域に置き換えメタスペース。 PermGenとメタスペースの最も重要な違いは何ですか? 私が知っている唯一の違いは、java.lang.OutOfMemoryError: PermGen spaceもうスローできず、VMパラメータMaxPermSizeが無視されることです。


5
Java 8は値または関数を繰り返すための良い方法を提供しますか?
他の多くの言語、例えば。Haskell、値や関数を複数回繰り返すのは簡単です。値1の8つのコピーのリストを取得するには、次のようにします。 take 8 (repeat 1) しかし、Java 8ではまだこれが見つかりません。Java8のJDKにそのような関数はありますか? または、代わりに次のような範囲に相当するもの [1..8] それはJavaのような冗長なステートメントの明らかな置き換えと思われるでしょう for (int i = 1; i <= 8; i++) { System.out.println(i); } のようなものを持っている Range.from(1, 8).forEach(i -> System.out.println(i)) この特定の例は実際にははるかに簡潔に見えませんが...うまくいけば、より読みやすくなります。
118 java  java-8 

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