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

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

4
ストリームでCollections.toMap()を使用するときに、リストの反復順序を維持するにはどうすればよいですか?
私は次のようにMapからを作成してListいます: List<String> strings = Arrays.asList("a", "bb", "ccc"); Map<String, Integer> map = strings.stream() .collect(Collectors.toMap(Function.identity(), String::length)); と同じ反復順序を維持したいと思いListます。メソッドLinkedHashMapを使用してを作成するにはどうすればよいCollectors.toMap()ですか?

10
Java 8:ラムダの反復をカウントするための好ましい方法は?
私はよく同じ問題に直面します。ラムダの外部で使用するために、ラムダの実行をカウントする必要があります。例えば: myStream.stream().filter(...).forEach(item->{ ... ; runCount++); System.out.println("The lambda ran "+runCount+"times"); 問題は、runCountがfinalである必要があるため、intにすることはできないということです。不変であるため、整数にすることはできません。クラスレベルの変数(つまりフィールド)にすることもできますが、このコードブロックでのみ必要になります。私はさまざまな方法があることを知っています、私はこれのためにあなたの好ましい解決策は何ですか?AtomicIntegerまたは配列参照または他の方法を使用していますか?

6
forEachループJava8 forMapエントリセット
マップエントリセットの各ループでjava7からjava8まで、各ループの古い従来型を変換しようとしていますが、エラーが発生します。これが私が変換しようとしているコードです: for (Map.Entry<String, String> entry : map.entrySet()) { System.out.println("Key : " + entry.getKey() + " Value : " + entry.getValue()); } これが私が行った変更です: map.forEach( Map.Entry<String, String> entry -> { System.out.println("Key : " + entry.getKey() + " Value : " + entry.getValue()); }); 私もこれをやってみました: Map.Entry<String, String> entry; map.forEach(entry -> { System.out.println("Key : …
82 java  lambda  java-8 

5
Java8およびJava9で符号なし整数を使用するにはどうすればよいですか?
Oracleの「プリミティブデータ型」ページでは、Java8がunsignedintおよびlongのサポートを追加すると記載されています。 intデフォルトでは、intデータ・タイプは、32ビットの-2最小値を有する2の補数整数、署名され31と2の最大値は31 -1。Java SE 8以降では、intデータ型を使用して、最小値が0、最大値が2 32-1の符号なし32ビット整数を表すことができます。使用Integer使用するクラスをint符号なし整数としてデータ型を。詳細については、「番号クラス」のセクションを参照してください。符号なし整数の算術演算をサポートするためにcompareUnsigned、divideUnsignedなどの静的メソッドがIntegerクラスに追加されました。 long:longデータ型は64ビットの2の補数整数です。署名さはlong-2の最小値を有し、63 2の最大値63を-1。Java SEの8以降では、使用することができlong、符号なし64ビット表現するデータ・タイプをlong0の最小値及び2の最大値を有し、64 -1。intによって提供される値よりも広い値の範囲が必要な場合は、このデータ型を使用します。Longこのクラスはまた、のような方法が含まれcompareUnsigned、divideUnsigned符号なしのための算術演算をサポートするなどlong。 ただし、unsignedlongまたはintegerを宣言する方法が見つかりません。たとえば、次のコードは、範囲内にある必要がある場合(割り当てられた値は正確に2 64 -1)、「リテラルは範囲外です」(もちろんJava 8を使用しています)というコンパイラエラーメッセージを表示します。: public class Foo { static long values = 18446744073709551615L; public static void main(String[] args){ System.out.println(values); } } それで、unsigned intまたはlongを宣言する方法はありますか?
82 java  java-8  unsigned 

6
Java8:リスト内のオブジェクトの特定のフィールドからの値の合計
クラスObjがあるとします class Obj{ int field; } そして、Objインスタンスのリストがあること、つまりList<Obj> lst。 さて、Java8で、フィルタリング基準(たとえば、オブジェクトの場合、基準は)の下で、fieldリスト内のオブジェクトからのintフィールドの値の合計をストリームで見つけるにはどうすればよいですか?lstoo.field > 10

8
コンストラクターに引数を持つJava8サプライヤー
サプライヤーが引数なしのコンストラクターのみをサポートするのはなぜですか? デフォルトのコンストラクターが存在する場合、これを行うことができます。 create(Foo::new) しかし、唯一のコンストラクターが文字列を取る場合、私はこれをしなければなりません: create(() -> new Foo("hello"))

5
Java7および8のメソッドの最大サイズ
Javaではメソッドが64KBを超えることはできないことを知っています。この制限により、JavaCC文法から生成されたコードで問題が発生します。Java 6に問題があり、文法を変更することでこれを修正することができました。Java 7の制限は変更されましたか、それともJava 8で計画されていますか? 明確にするためだけに。自分で64KBを超えるメソッドは必要ありません。しかし、私は非常に大きなメソッドにコンパイルされる文法を書きました。
82 java  java-7  java-8 

3
Java 8ではメソッド参照キャッシュは良い考えですか?
次のようなコードがあると考えてください。 class Foo { Y func(X x) {...} void doSomethingWithAFunc(Function<X,Y> f){...} void hotFunction(){ doSomethingWithAFunc(this::func); } } それhotFunctionが非常に頻繁に呼び出されるとします。それがキャッシュに賢明だろうthis::func、多分このように: class Foo { Function<X,Y> f = this::func; ... void hotFunction(){ doSomethingWithAFunc(f); } } 私がJavaメソッド参照を理解している限り、メソッド参照が使用されると、仮想マシンは匿名クラスのオブジェクトを作成します。したがって、参照をキャッシュすると、そのオブジェクトは1回だけ作成されますが、最初のアプローチでは各関数呼び出しでオブジェクトが作成されます。これは正しいです? コードのホットな位置に表示されるメソッド参照をキャッシュする必要がありますか、それともVMがこれを最適化して、キャッシュを不要にすることができますか?これに関する一般的なベストプラクティスはありますか、それともこのようなキャッシュが役立つかどうかにかかわらず、この高度にVMの実装に固有ですか?

4
Java 8:リストをストリームAPIとマージする
私は次の状況にあります Map<Key, ListContainer> map; public class ListContainer{ List<AClass> lst; } 私はすべてのリストをマージする必要があるlstからListContainerからオブジェクトMapマップ。 public static void main(String args[]){ List<AClass> alltheObjectsAClass = map.values().stream(). // continue.... } Java 8ストリームAPIを使用して、どのようにアイデアがありますか?

3
Java-8で複数の例外をキャッチする
私の方法で見つけたマルチキャッチ機能を試している間、m1()すべてが期待どおりにうまく機能しています。 ただし、m2()同じコードではコンパイルされません。コードの行数を減らすために構文を変更しました。 public class Main { public int m1(boolean bool) { try { if (bool) { throw new Excep1(); } throw new Excep2(); //This m1() is compiling abs fine. } catch (Excep1 | Excep2 e) { return 0; } } public int m2(boolean b) { try { throw b ? …


6
自身を要素として含むArrayListのハッシュコード
我々は見つけることができるhashcodeのをlist、自身が含まれていますかelement? 私はこれが悪い習慣であることを知っていますが、これは面接官が尋ねたものです。 次のコードを実行すると、がスローされますStackOverflowError。 public class Main { public static void main(String args[]) { ArrayList<ArrayList> a = new ArrayList(); a.add(a); a.hashCode(); } } ここで私は2つの質問があります: なぜStackOverflowErrorですか? この方法でハッシュコードを見つけることは可能ですか?

5
ハッシュマップのハッシュマップを初期化するコードの繰り返しを回避するにはどうすればよいですか?
すべてのクライアントにはIDと多くの請求書があり、日付ごとに請求書のハッシュマップのIDごとのクライアントのハッシュマップとして保存されています。 HashMap<LocalDateTime, Invoice> allInvoices = allInvoicesAllClients.get(id); if(allInvoices!=null){ allInvoices.put(date, invoice); //<---REPEATED CODE }else{ allInvoices = new HashMap<>(); allInvoices.put(date, invoice); //<---REPEATED CODE allInvoicesAllClients.put(id, allInvoices); } Javaソリューションは使用するようgetOrDefaultです: HashMap<LocalDateTime, Invoice> allInvoices = allInvoicesAllClients.getOrDefault( id, new HashMap<LocalDateTime, Invoice> (){{ put(date, invoice); }} ); しかし、getがnullでない場合でも、put(date、invoice)を実行したいので、「allInvoicesAllClients」にデータを追加する必要があります。だからそれはあまり役に立たないようです。
27 java  java-8  hashmap 

1
カスタムコンパレーターを使用してTreeSetから削除しないと、より大きな項目のセットが削除されないのはなぜですか?
Java 8とJava 11の両方を使用TreeSetして、String::compareToIgnoreCaseコンパレーターで以下を検討してください。 final Set<String> languages = new TreeSet<>(String::compareToIgnoreCase); languages.add("java"); languages.add("c++"); languages.add("python"); System.out.println(languages); // [c++, java, python] に存在する正確な要素を削除しようとすると、TreeSet機能します。指定された要素はすべて削除されます。 languages.removeAll(Arrays.asList("PYTHON", "C++")); System.out.println(languages); // [java] ただし、に存在する以上のものを削除しようとするTreeSetと、呼び出しは何も削除しません(これは後続の呼び出しではなく、上のスニペットの代わりに呼び出されます)。 languages.removeAll(Arrays.asList("PYTHON", "C++", "LISP")); System.out.println(languages); // [c++, java, python] 何が悪いのですか?なぜこのように動作するのですか? 編集:String::compareToIgnoreCaseは有効なコンパレータです: (l, r) -> l.compareToIgnoreCase(r)

7
Java 8でブロッキングバックグラウンドローダーを作成する方法
質問 Java 8で適切なバックグラウンドローダーをどのように作成しますか?状況、契約条項: データはバックグラウンドでロードする必要があります ロード後、データが表示されます データがロードされている間、それ以上のリクエストは受け入れられません データのロード中にリクエストがあった場合、一定のタイムアウト(5秒など)後に別のロードをスケジュールする必要があります。 目的は、たとえばリロード要求を受け入れさせることですが、データベースが要求であふれることはありません。 MCVE これがMCVEです。これは、Thread.sleepを2秒間呼び出すだけでロードをシミュレートするバックグラウンドタスクで構成されています。タスクは毎秒スケジュールされるため、当然、バックグラウンドロードタスクの重複につながりますが、これは避けてください。 public class LoadInBackgroundExample { /** * A simple background task which should perform the data loading operation. In this minimal example it simply invokes Thread.sleep */ public static class BackgroundTask implements Runnable { private int id; public BackgroundTask(int id) { …

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