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

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

3
パラメータでのJavaタイプの昇格
私はこのスニペットを偶然見つけました: public class ParamTest { public static void printSum(int a, double b) { System.out.println("In intDBL " + (a + b)); } public static void printSum(long a, long b) { System.out.println("In long " + (a + b)); } public static void printSum(double a, long b) { System.out.println("In doubleLONG " + (a …

2
数値が0のときに、ストリームでlimit(number)呼び出しをスキップするにはどうすればよいですか?
のオブジェクトを提供するJavaコードがいくつかありますitems。それはに基づいてそれらを制限しますmaxNumber: items.stream() .map(this::myMapper) .filter(item -> item != null) .limit(maxNumber) .collect(Collectors.toList()); それは正しく動作しますが、問題はこれです:制限をスキップする方法はありmaxNumber == 0ますか? 私はこれを行うことができることを知っています: if (maxNumber == 0) { items.stream() .map(this::myMapper) .filter(item -> item != null) .collect(Collectors.toList()); } else { items.stream() .map(this::myMapper) .filter(item -> item != null) .limit(maxNumber) .collect(Collectors.toList()); } しかし、おそらくもっと良い方法があると思いますか?


2
矢印(->)演算子の優先順位/優先順位が最も低いか、割り当て/組み合わせ割り当ての優先順位が最も低いですか?
JLS: 最も優先順位の低い演算子は、ラムダ式の矢印(->)で、その後に代入演算子が続きます。 どちらの方向に進んだか(優先度の増加、優先度の減少)?-「フォロー済み」とは、割り当てが(矢印演算子に対して)優先度が高いか低いかを意味します。「最低」(矢印)は絶対最低を意味するので、増加すると思います。 私が理解しているように、矢印(->)はこのプリンストン演算子の優先順位表の一番下(つまり、すべての代入演算子の下にあります)にある必要があります。 私の理解は正しいですか? ExamTrayは、矢印の優先順位は少なくとも割り当てと同じであると言っているようです...さらに、矢印の結合性は(割り当てとは異なり)左→右→右であることを明確にしました。矢印の結合性に関するJLSの引用は見つかりませんでした。 私はいつも、割り当ての優先順位は主に理由により最低だと思っていました。


3
+0および-0は、intおよびfloatデータの異なる動作を示します
私はこの記事を読んで、マイナスとプラスのゼロです。 私の理解では、次のコードは 出力としてtrue とtrueを与えるはずです。 しかし、それは与えているfalseとtrue出力など。 負のゼロと正のゼロを比較しています。 public class Test { public static void main(String[] args) { float f = 0; float f2 = -f; Float F = new Float(f); Float F1 = new Float(f2); System.out.println(F1.equals(F)); int i = 0; int i2 = -i; Integer I = new Integer(i); Integer I1 …
16 java  java-8 

5
マップとは異なる値を持つマップを作成する方法(およびBinaryOperatorを使用して正しいキーを使用する方法)
私はマップを持ってMap<K, V>おり、私の目標は重複した値を削除して、まったく同じ構造をMap<K, V>再び出力することです。重複値が見つかった場合には、一つのキー(が選択されなければならないk二つの鍵(から)k1とk1、これらの値を保持する)、このため、想定BinaryOperator<K>を与えるkからk1とk2入手可能です。 入力と出力の例: // Input Map<Integer, String> map = new HashMap<>(); map.put(1, "apple"); map.put(5, "apple"); map.put(4, "orange"); map.put(3, "apple"); map.put(2, "orange"); // Output: {5=apple, 4=orange} // the key is the largest possible 使用して私の試みはStream::collect(Supplier, BiConsumer, BiConsumer)あるビット非常に不器用とのような変更可能な操作が含まMap::putとMap::remove私は避けたいたの。 // // the key is the largest integer possible (following the example above) final …

1
演算子「+」はオブジェクトと文字列に適用できません
次のコード: void someMethod(Object value) { String suffix = getSuffix(); if (suffix != null) value += suffix; [...] } JDK 8では(-source 1.6を使用して)エラーなしでコンパイルされますが、JDK 6ではエラーメッセージで失敗します。 Operator '+' cannot be applied to java.lang.Object and java.lang.String エラーの内容は理解していますが、これがJDK 8でコンパイルされるのはなぜですか?これはどこかに文書化されていますか?
12 java  java-8  javac  java-6 

2
割り当てられたタスクの1つが何らかの理由で失敗すると、Javaはexecutorサービスを停止します
いくつかのタスクを同時に、1秒の間隔で1分間実行するある種のサービスが必要です。 タスクの1つが失敗した場合、サービスとそれとともに実行されたすべてのタスクを何らかの問題が発生したことを示すインジケーターで停止します。それ以外の場合は、1分後にすべてがうまくいった場合、サービスはすべて正常に終了したことを示すインジケーターで停止します。 たとえば、私は2つの機能があります: Runnable task1 = ()->{ int num = Math.rand(1,100); if (num < 5){ throw new Exception("something went wrong with this task,terminate"); } } Runnable task2 = ()->{ int num = Math.rand(1,100) return num < 50; } ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(2); task1schedule = scheduledExecutorService.scheduleAtFixedRate(task1, 1, 60, TimeUnit.SECONDS); task2schedule = …

2
このJava 8ストリームのcollect()メソッドを理解するにはどうすればよいですか?
私はint配列をListに変換しようとしていましたが、Java 8 Streamを使用するというなじみのないルートを取り、これを思いつきました Arrays.stream(arr).boxed().collect(Collectors.toList()); 私はまだこの行を完全に理解するのにまだ苦労しています、ほとんどの場合、 Collectors.toList()この場合、なぜArrayList<Integer>実装Listインターフェースが返されるのですか?なぜ、LinkedList<Integer>またはListインターフェイスに準拠していない他の総称クラスですか?ここでは、APIリストのセクションでArrayListについて簡単に説明している以外は何も見つかりません。 左のパネルは どういう意味ですか?明らかに、一般的な戻り値の型です(このコードでは)。そして、私はメソッドのジェネリック型引数だと思いますが、それらはどのように指定されていますか?Collectorインターフェースのドキュメントを調べましたが、吸収できませんでした。 Stream.collect()RArrayList<Integer><R, A>

2
サイズが不明なアンバランスなスプリッターを再バランスできますか?
を使用しStreamて、リモートで保存された不明な数のJSONファイルの異種のセットの処理を並列化したいと思います(ファイルの数は事前に不明です)。ファイルのサイズは、ファイルごとに1つのJSONレコードから、他のいくつかのファイルでは最大100,000レコードまでさまざまです。JSONレコードこの場合には、自己完結型のJSONオブジェクトは、ファイル内の1つの行として表現します。 私は本当にこれにストリームを使いたいので、これを実装しましたSpliterator: public abstract class JsonStreamSpliterator<METADATA, RECORD> extends AbstractSpliterator<RECORD> { abstract protected JsonStreamSupport<METADATA> openInputStream(String path); abstract protected RECORD parse(METADATA metadata, Map<String, Object> json); private static final int ADDITIONAL_CHARACTERISTICS = Spliterator.IMMUTABLE | Spliterator.DISTINCT | Spliterator.NONNULL; private static final int MAX_BUFFER = 100; private final Iterator<String> paths; private JsonStreamSupport<METADATA> reader = null; …

3
Aがaの前に、Bがbの前にくるカスタムソート
私はこのような色のリストを持っています: ピンク、ブルー、レッド、ブルー、グレー、グリーン、パープル、ブラック... etc List<String> listOfColors = Arrays.asList("Pink", "Blue", "Red", "blue", "Grey", "green", "purple", "black"); いくつかの果物の色をフィルタリングするようないくつかの中間的な操作があります。今、私はそれらを順番にソートしたいフィルタリングされた結果を残しています: ブルー、ブラック、ブルー、グレー、グリーン、ピンク、パープル、レッド 私が試してみました : List<String> collect = listOfColors.stream().sorted(String::compareToIgnoreCase) .collect(Collectors.toList()); 期待どおりに動作しません。 出力は次のとおりです。 ブラック、ブルー、ブルー、グリーン、グレー、ピンク、パープル、レッド 私は以下が欲しい: ブルー、ブラック、ブルー、グレー、グリーン、ピンク、パープル、レッド

5
Javaで1年の合計週を見つける方法は?
私はプロジェクトに取り組んでいます。そこで、私は1年の合計週を見つける必要があります。次のコードを試してみましたが、間違った答えが返ってきました。2020年は53週間ですが、このコードでは52週間になります。 このコードのどこが間違っていますか? package com.hib.mapping; import java.time.LocalDate; import java.time.temporal.WeekFields; import java.util.Calendar; import java.util.GregorianCalendar; import org.joda.time.DateTime; public class TestWeek { public static void main(String args[]) { System.out.println(getWeeks()); } public static int getWeeks() { Calendar cal = Calendar.getInstance(); cal.set(Calendar.YEAR, 2020); cal.set(Calendar.MONTH, Calendar.JANUARY); cal.set(Calendar.DAY_OF_MONTH, 1); GregorianCalendar gregorianCalendar = new GregorianCalendar(); int weekDay = cal.get(Calendar.DAY_OF_WEEK) …

1
コンパイラは、無関係なインターフェイスタイプで呼び出されたときに、クラスタイプパラメータを持つこのジェネリックメソッドを選択するのはなぜですか?
次の2つのクラスとインターフェースを検討してください。 public class Class1 {} public class Class2 {} public interface Interface1 {} mandatoryオーバーロードされたメソッドを呼び出すための2番目の呼び出しが、との関係がないClass2場合getInterface1、なぜですか?Interface1Class2 public class Test { public static void main(String[] args) { Class1 class1 = getClass1(); Interface1 interface1 = getInterface1(); mandatory(getClass1()); // prints "T is not class2" mandatory(getInterface1()); // prints "T is class2" mandatory(class1); // prints "T is …

1
Java-8のメソッドリファレンスとジェネリックス
ジェネリック型と組み合わせたメソッド参照に関する問題に直面しています。 オーバーロードされたメソッドを呼び出す必要があるコードがありますが、エラーで失敗します: 値m1()を解決できません 問題がどこにあるのかを明確にするために、問題を単純化しました。 次のコードは失敗します。 public class Test { void test() { // Getting error here setValue(C1::m1, Integer.ONE); } <E extends I1, T> void setValue(BiConsumer<E, T> cons, T value) { } } interface I1 { } class C1 implements I1 { void m1(Integer value) { } void m1(int value) { …
11 java  generics  lambda  java-8 

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