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

Stream APIの使用に関連する質問には、このタグを使用します。これはJava 8で導入され、コレクションのfilter-map-reduceパイプラインなど、値のストリームに対する関数形式の操作をサポートしています。

2
Java8でのデータのリストのクリーニング
データのリストをクリーニングするために、データのリストと実行するクリーニング操作のリストを受け入れるメソッドを作成しました。 public <T> List<T> cleanData(List<T> data, List<Function<T, T>> cleanOps) { List<T>dataNew=data.stream().map((str) -> { T cleanData = str; for(Function<T,T> function:cleanOps) { cleanData=function.apply(cleanData); } return cleanData; }).collect(Collectors.toList()); return dataNew; } ここでの問題Collectors.toList()は、新しいリストを返すため、リスト全体を再度作成することです。余分なスペースを使用せずに同じ結果を得ることができますか? 以下は、呼び出し用のコードです。 public void processData() { List<Function<String, String>> cleanOps = new ArrayList<>(); cleanOps.add(String::toLowerCase); cleanOps.add(str -> str.replaceAll(" ", "")); List<String> data = new …

4
Java 8ストリームAPIでpeek()とallMatch()が連動する仕組み
以下のようなpeekメソッドのJava 8 Stream APIに関するクイズを見つけました Arrays.asList("Fred", "Jim", "Sheila") .stream() .peek(System.out::println) .allMatch(s -> s.startsWith("F")); 出力は Fred Jim このストリームがどのように機能するのか混乱していますか?私の期待される結果は Fred Jim Sheila peek()メソッドは中間操作であり、Streamの各要素を処理します。誰かがこれを説明できますか?

8
条件付きでストリームから最初の(インデックスが0の)要素を削除する
私は次のコードを持っています: Stream<String> lines = reader.lines(); "email"最初の文字列が等しい場合、ストリームから最初の文字列を削除します。ストリームの他の文字列については、このチェックは必要ありません。 どうすればそれを達成できますか? PS 確かに、それをリストに変換してから、オールドスクールforループを使用することもできますが、さらにストリームをもう一度必要とします。

6
Javaで指定されたマップ値から最新の日付を見つける方法
文字列データ型として日付を付けた値で、以下の値のハッシュマップがあります。マップで使用可能なすべての日付を比較し、非常に最近の日付を持つKey-Valueを1つだけ抽出します。 キーではなく値と比較したいのですが。 以下のコードを含めました import java.util.HashMap; import java.util.Map; public class Test { public static void main(String[] args) { Map<String, String> map = new HashMap<>(); map.put("1", "1999-01-01"); map.put("2", "2013-10-11"); map.put("3", "2011-02-20"); map.put("4", "2014-09-09"); map.forEach((k, v) -> System.out.println("Key : " + k + " Value : " + v)); } } これの予想される出力は次のとおりです。 キー4値2014-09-09

4
ストリームによる例外の処理
リストMap<String,List<String>>にMap<String,List<Long>>あるそれぞれStringがを表すので、私はそれを変えたいと思いますLong: Map<String,List<String>> input = ...; Map<String,List<Long>> output= input.entrySet() .stream() .collect(toMap(Entry::getKey, e -> e.getValue().stream() .map(Long::valueOf) .collect(toList())) ); 私の主な問題は、それぞれStringが正しく表示されない可能性があることLongです。何か問題があるかもしれません。Long::valueOf例外が発生する場合があります。この場合、nullまたは空を返したいMap<String,List<Long>> このoutputマップを繰り返し処理したいからです。しかし、エラー変換を受け入れることはできません。一つでもない。不正な文字列->長い変換の場合に空の出力を返す方法に関するアイデアはありますか?

4
HashMapの値を反復してコピーする効率的な方法
変換したい: Map<String, Map<String, List<Map<String, String>>>> inputMap に: Map<String, Map<String, CustomObject>> customMap inputMap構成で提供され、準備ができていますが、customMapフォーマットする必要があります。CustomObjectはList<Map<String, String>>、関数で数行のコードを使用することから派生します。 入力マップを反復し、customMapでキー値をコピーする通常の方法を試しました。Java 8または他のショートカットを使用してそれを行う効率的な方法はありますか? Map<String, Map<String, List<Map<String, String>>>> configuredMap = new HashMap<>(); Map<String, Map<String, CustomObj>> finalMap = new HashMap<>(); for (Map.Entry<String, Map<String, List<Map<String, String>>>> attributeEntry : configuredMap.entrySet()) { Map<String, CustomObj> innerMap = new HashMap<>(); for (Map.Entry<String, List<Map<String, String>>> valueEntry …

3
Javaストリーム:複数の範囲でフィルター
リソースをフィルタリングし、フィールドに基づいて一部の要素を除外しようとしています。除外するには、セット(除外する必要があるIDを含む)とリスト(除外する必要があるIDの複数の範囲を含む)があります。以下のロジックを作成しましたが、2番目のフィルターロジックに満足できません。Java 8でそれを実行できるより良い方法はありますか?範囲を含める場合も同じようにする必要があります。 Set<String> extensionsToExclude = new HashSet<>(Arrays.asList("20","25","60","900")); List<String> rangesToExclude = new ArrayList<>(Arrays.asList("1-10","20-25","50-70","1000-1000000")); return directoryRecords.stream() .filter((directoryRecord) -> !extensionsToExclude.contains(directoryRecord.getExtensionNumber())) .filter((directoryRecord -> { Boolean include = true; for(String s : rangesToExclude) { String [] rangeArray = s.split("-"); Integer extension = Integer.parseInt(directoryRecord.getExtensionNumber()); if(extension <= Integer.parseInt(rangeArray[0]) && extension >= Integer.parseInt(rangeArray[1])) { include = false; } …

4
List of Employees with Java streamから、特定の日付の前後の従業員を取得します。
参加日が異なるs がListありEmployeeます。ストリームを使用してリストから参加する特定の日付の前後に従業員を取得したい。 私は次のコードを試しました、 List<Employee> employeeListAfter = employeeList.stream() .filter(e -> e.joiningDate.isAfter(specificDate)) .collect(Collectors.toList()); List<Employee> employeeListBefore = employeeList.stream() .filter(e -> e.joiningDate.isBefore(specificDate)) .collect(Collectors.toList()); class Employee{ int id; String name; LocalDate joiningDate; } これを単一のストリームで行う方法はありますか?

5
リクエストアイテムごとに複数のスレッドを作成する方法
注文レベルでマルチスレッドを使用して以下のコードを処理しようとしています。 List<String> orders = Arrays.asList("order1", "order2", "order3", "order4", "order1"); 現在の順次実行: orders.stream().forEach(order -> { rules.forEach(rule -> { finalList.add(beanMapper.getBean(rule) .applyRule(createTemplate.apply(getMetaData.apply(rule), command), order)); }); }); 私は使ってみました: orders.parallelStream().forEach(order -> {}} // code snippet. しかし、rules.forEach(rule-> {}}の順序を変更しています。 例: 入力: List<String> orders = Arrays.asList("order1", "order2", "order3", "order4", "order1"); List<String> rules = Arrays.asList("rule1", "rule2", "rule3"); 期待される出力: order1 with …

3
大きなデータファイルを1行ずつコピーする方法は?
35GBのCSVファイルがあります。各行を読み取り、条件に一致する場合はその行を新しいCSVに書き出します。 try (BufferedWriter writer = Files.newBufferedWriter(Paths.get("source.csv"))) { try (BufferedReader br = Files.newBufferedReader(Paths.get("target.csv"))) { br.lines().parallel() .filter(line -> StringUtils.isNotBlank(line)) //bit more complex in real world .forEach(line -> { writer.write(line + "\n"); }); } } これには約かかります。7分。そのプロセスをさらにスピードアップすることは可能ですか?

3
Java 8 Streamsを使用してリストが空の場合、デフォルトのリストを返しますか?
以下がストリーム操作の1つのセットとして実行できるようにする方法はありますか?recommendedProductsが空であるかどうかを明示的にチェックせずにデフォルトのリストを返すか、またはフィルターされたリストを返しますか? public List<Product> getRecommendedProducts() { List<Product> recommendedProducts = this.newProducts .stream() .filter(isAvailable) .collect(Collectors.toList()); if (recommendedProducts.isEmpty()) { return DEFAULT_PRODUCTS; } return recommededProducts; }

4
Java-8を使用して、偶数の位置を変更せずに配列の数値を並べ替える
Java 8ストリームを学習しています。plsに教えてくださいsortArray。メソッドをよりコンパクトに書くにはどうすればよいですか? import org.junit.Test; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.Map; import static org.junit.Assert.assertArrayEquals; public class TestStream { /* * Sort numbers in an array without changing even numbers position */ @Test public void test_1() { int[] nonSorted = new int[]{3, 4, 5, 2, 1, 6, 9, 8, 7, …

3
プロジェクションの前後に異なるモデルでフィルタリングを使用するJava
hibernateの次のJAVAモデルを考えてみます。 @Entity @Table public class Person { @Id @GeneratedValue(strategy = GenerationType.AUTO) public Long id; @Column public String firstName; @Column public String lastName; @Column public Boolean active; } APIシリアル化の次のモデル(Spring Boot Rest Controller を使用): public class PersonVO { public Long id; public String fullName; } 私が欲しいのは: 個人にフィルタリングを適用する(静的に定義) PersonVOでフィルタリングを適用する(@RequestParamから取得) ではC#.NET、私は次のように作ることができます: IQueryable<Person> personsQuery = …

3
ストリームを含むJavaでshort []をList <Short>に変換する方法は?
私はこの質問から外挿できると考えましたが、できません もちろんできます short[] shortarray = {0,1,2}; List&lt;Short&gt; shortList = new ArrayList&lt;Short&gt;(); for (Short s : shortarray) { shortList.add(s); } しかし、私はストリームでそれを行う方法を考えています。 List&lt;Short&gt; shortList = Arrays.stream(shortarray).boxed() .collect(Collectors.toList()); たとえば動作しませんが、収量 The method stream(T[]) in the type Arrays is not applicable for the arguments (short[])

2
ストリームパイプラインでのデータベースへの保存
オラクルのウェブサイトのドキュメントによると: ストリーム操作に対する動作パラメータの副作用は、一般に推奨されません。これらは、無意識の要件の意図しない違反や、その他のスレッドセーフティの危険につながることが多いためです。 これには、ストリームの要素をデータベースに保存することも含まれますか? 次の(疑似)コードを想像してみてください。 public SavedCar saveCar(Car car) { SavedCar savedCar = this.getDb().save(car); return savedCar; } public List&lt;SavedCars&gt; saveCars(List&lt;Car&gt; cars) { return cars.stream() .map(this::saveCar) .collect(Collectors.toList()); } この実装に対抗する望ましくない影響は何ですか? public SavedCar saveCar(Car car) { SavedCar savedCar = this.getDb().save(car); return savedCar; } public List&lt;SavedCars&gt; saveCars(List&lt;Car&gt; cars) { List&lt;SavedCars&gt; savedCars = new ArrayList&lt;&gt;(); for …

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