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

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

8
イテレータをストリームに変換する方法は?
私は、イテレータをストリームに「見る」Iteratorために、Streamまたはより具体的に変換する簡潔な方法を探しています。 パフォーマンス上の理由から、新しいリストではイテレータのコピーを避けたいと思います。 Iterator<String> sourceIterator = Arrays.asList("A", "B", "C").iterator(); Collection<String> copyList = new ArrayList<String>(); sourceIterator.forEachRemaining(copyList::add); Stream<String> targetStream = copyList.stream(); コメントのいくつかの提案に基づいて、私も使用しようとしましたStream.generate: public static void main(String[] args) throws Exception { Iterator<String> sourceIterator = Arrays.asList("A", "B", "C").iterator(); Stream<String> targetStream = Stream.generate(sourceIterator::next); targetStream.forEach(System.out::println); } ただし、NoSuchElementException(の呼び出しがないためhasNext) Exception in thread "main" java.util.NoSuchElementException at java.util.AbstractList$Itr.next(AbstractList.java:364) at Main$$Lambda$1/1175962212.get(Unknown Source) …
468 java  iterator  java-8 

8
Java 8 Iterable.forEach()とforeachループ
OverантотвопросестьответынаStack Overflowнарусском:ЦиклforeachпротивIterable.foreachвJava 8:чтолучше? 次のうちどれがJava 8でより良い実践ですか? Java 8: joins.forEach(join -> mIrc.join(mSession, join)); Java 7: for (String join : joins) { mIrc.join(mSession, join); } 私はラムダで「単純化」できるforループをたくさん持っていますが、それらを使用することには本当に何か利点がありますか?パフォーマンスと読みやすさが向上しますか? 編集 また、この質問をより長い方法に拡張します。あなたはラムダから親関数を返すこともブレークすることもできないことを知っています、そしてそれらを比較するときにこれも考慮に入れられるべきですが、他に考慮すべきことはありますか?

27
プロパティごとに異なるJava 8
Java 8ではStream、各オブジェクトのプロパティの違いをチェックすることにより、API を使用してコレクションをどのようにフィルタリングできますか? たとえば、Personオブジェクトのリストがあり、同じ名前の人を削除したい場合、 persons.stream().distinct(); Personオブジェクトのデフォルトの等価チェックを使用するため、次のようなものが必要です。 persons.stream().distinct(p -> p.getName()); 残念ながら、distinct()メソッドにはそのようなオーバーロードはありません。Personクラス内の等価チェックを変更せずに、これを簡潔に行うことは可能ですか?

14
Java 8でjava.util.stream.Streamからリストを取得する
コレクションを簡単にフィルター処理するために、Java 8ラムダをいじっていました。しかし、同じステートメント内で新しいリストとして結果を取得する簡潔な方法は見つかりませんでした。これまでのところ、私の最も簡潔なアプローチは次のとおりです。 List<Long> sourceLongList = Arrays.asList(1L, 10L, 50L, 80L, 100L, 120L, 133L, 333L); List<Long> targetLongList = new ArrayList<>(); sourceLongList.stream().filter(l -> l > 100).forEach(targetLongList::add); 新しい結果リストを生成せずに停止したため、ネット上の例は私の質問に答えませんでした。より簡潔な方法があるはずです。私がいることを、期待したStreamクラスには、などのメソッドがありtoList()、toSet()... targetLongList3行目で変数を直接割り当てる方法はありますか?

9
Java 8 JDKを使用してIterableをStreamに変換する
私はを返すインターフェイスを持っていますjava.lang.Iterable<T>。 Java 8 Stream APIを使用してその結果を操作したいと思います。 ただし、Iterableは「ストリーミング」できません。 リストに変換せずにIterableをストリームとして使用する方法はありますか?

14
Java 8並列ストリームのカスタムスレッドプール
Java 8 並列ストリームのカスタムスレッドプールを指定することは可能ですか?どこにも見つかりません。 サーバーアプリケーションがあり、並列ストリームを使用したいとします。しかし、アプリケーションは大きく、マルチスレッドなので、それを区分けしたいと思います。別のモジュールからのapplicationblockタスクの1つのモジュールで実行速度の遅いタスクが必要ではありません。 異なるモジュールに異なるスレッドプールを使用できない場合、それは実際の状況のほとんどで並列ストリームを安全に使用できないことを意味します。 次の例を試してください。別のスレッドで実行されるCPU集中タスクがいくつかあります。タスクは並列ストリームを活用します。最初のタスクは壊れているため、各ステップには1秒かかります(スレッドスリープによってシミュレートされます)。問題は、他のスレッドがスタックして、壊れたタスクが完了するのを待つことです。これは不自然な例ですが、サーブレットアプリと誰かが共有フォーク結合プールに長時間実行タスクを送信するとします。 public class ParallelTest { public static void main(String[] args) throws InterruptedException { ExecutorService es = Executors.newCachedThreadPool(); es.execute(() -> runTask(1000)); //incorrect task es.execute(() -> runTask(0)); es.execute(() -> runTask(0)); es.execute(() -> runTask(0)); es.execute(() -> runTask(0)); es.execute(() -> runTask(0)); es.shutdown(); es.awaitTermination(60, TimeUnit.SECONDS); } private static void runTask(int …

18
引数でJava 8のオプションを使用しない理由
多くのWebサイトで読みましたOptionalは戻り値の型としてのみ使用し、メソッドの引数では使用しないでください。論理的な理由を見つけるのに苦労しています。たとえば、2つのオプションパラメータを持つロジックがあります。したがって、次のようにメソッドシグネチャを記述することは理にかなっていると思います(ソリューション1): public int calculateSomething(Optional<String> p1, Optional<BigDecimal> p2 { // my logic } 多くのWebページでは、オプションをメソッドの引数として使用しないでください。これを念頭に置いて、次のメソッドシグネチャを使用して明確なJavadocコメントを追加し、引数がnullになる可能性があることを指定します。将来のメンテナがJavadocを読み、引数を使用する前に常にnullチェックを実行することを期待します(解決策2) : public int calculateSomething(String p1, BigDecimal p2) { // my logic } または、より良いインターフェイスを提供し、p1とp2がオプションであることをより明確にするために、メソッドを4つのパブリックメソッドに置き換えることもできます(ソリューション3)。 public int calculateSomething() { calculateSomething(null, null); } public int calculateSomething(String p1) { calculateSomething(p1, null); } public int calculateSomething(BigDecimal p2) { calculateSomething(null, p2); } public …
392 java  java-8  optional 

22
Java 8でインデックスを使用してストリームを反復する簡潔な方法はありますか?
ストリーム内のインデックスにアクセスしながら、ストリームを反復する簡潔な方法はありますか? String[] names = {"Sam","Pamela", "Dave", "Pascal", "Erik"}; List<String> nameList; Stream<Integer> indices = intRange(1, names.length).boxed(); nameList = zip(indices, stream(names), SimpleEntry::new) .filter(e -> e.getValue().length() <= e.getKey()) .map(Entry::getValue) .collect(toList()); そこに与えられたLINQの例と比べてかなりがっかりしたようです string[] names = { "Sam", "Pamela", "Dave", "Pascal", "Erik" }; var nameList = names.Where((c, index) => c.Length <= index + 1).ToList(); より簡潔な方法はありますか? …
382 java  java-8  java-stream 



14
Java 8でパラメーターとしてラムダを受け取るメソッドを定義するにはどうすればよいですか?
Java 8では、メソッドをLambda式として作成し、参照で渡すことができます(内部では少し作業が必要です)。オンラインでラムダを作成してメソッドで使用する例はたくさんありますが、ラムダをパラメーターとして取るメソッドの作成方法の例はありません。そのための構文は何ですか? MyClass.method((a, b) -> a+b); class MyClass{ //How do I define this method? static int method(Lambda l){ return l(5, 10); } }
363 java  lambda  java-8 

14
最終版と効果的な最終版の違い
私はJava 8でラムダで遊んでいて、警告に出くわしましたlocal variables referenced from a lambda expression must be final or effectively final。匿名クラス内で変数を使用する場合、それらは外部クラスでfinalでなければならないことは知っていますが、それでも-finalと実質的にfinalの違いは何ですか?

6
LocalDateTimeで日付を解析/フォーマットする方法は?(Java 8)
Java 8は、日付と時刻を操作するための新しいjava.time APIを追加しました(JSR 310)。 文字列として日付と時刻があります(例:)"2014-04-08 12:30"。LocalDateTime指定された文字列からインスタンスを取得するにはどうすればよいですか? LocalDateTimeオブジェクトの操作が完了した後:次に、LocalDateTimeインスタンスを上記と同じ形式の文字列に変換するにはどうすればよいですか?

5
Java 8インターフェイスメソッドで「最終」が許可されないのはなぜですか?
Java 8の最も便利な機能の1つは、defaultインターフェースの新しいメソッドです。それらが導入された理由は基本的に2つあります(他にもある場合があります)。 実際のデフォルト実装を提供します。例:Iterator.remove() JDK APIの進化を可能にする。例:Iterable.forEach() APIデザイナーの観点から、インターフェイスメソッドで他の修飾子を使用できるようにしたいと思っていましたfinal。これは、便利なメソッドを追加するときに役立ち、クラスの実装における「偶発的な」オーバーライドを防ぎます。 interface Sender { // Convenience method to send an empty message default final void send() { send(null); } // Implementations should only implement this method void send(String message); } 上記がSenderクラスの場合、すでに一般的な方法です。 abstract class Sender { // Convenience method to send an empty message final void …

12
メソッド参照述語を否定する方法
Java 8では、メソッド参照を使用してストリームをフィルタリングできます。次に例を示します。 Stream<String> s = ...; long emptyStrings = s.filter(String::isEmpty).count(); 既存のものを否定するメソッド参照を作成する方法はありますか? long nonEmptyStrings = s.filter(not(String::isEmpty)).count(); not以下のようなメソッドを作成することはできましたが、JDKが同様のものを提供しているかどうか疑問に思いました。 static <T> Predicate<T> not(Predicate<T> p) { return o -> !p.test(o); }
331 java  predicate  java-8  negate 

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