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

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

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の各要素を処理します。誰かがこれを説明できますか?

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 …

2
WeakHashMapを使用しているにもかかわらずOutOfMemoryException
を呼び出さない場合System.gc()、システムはOutOfMemoryExceptionをスローします。なぜSystem.gc()明示的に呼び出す必要があるのか​​わかりません。JVMはgc()それ自体を呼び出す必要がありますよね?お知らせ下さい。 以下は私のテストコードです: public static void main(String[] args) throws InterruptedException { WeakHashMap<String, int[]> hm = new WeakHashMap<>(); int i = 0; while(true) { Thread.sleep(1000); i++; String key = new String(new Integer(i).toString()); System.out.println(String.format("add new element %d", i)); hm.put(key, new int[1024 * 10000]); key = null; //System.gc(); } } 以下のように追加-XX:+PrintGCDetailsして、GC情報を印刷します。ご覧のとおり、実際には、JVMは完全なGC実行を試みますが失敗します。私はまだその理由を知りません。System.gc();行をコメント解除すると、結果がポジティブになるのは非常に奇妙です。 add new element …

1
removeIf実装の詳細
で理解できない小さな実装の詳細な質問がありArrayList::removeIfます。最初にいくつかの前提条件がないと、単純にそれを置くことができないと思います。 そのため:とは異なり、実装は基本的にバルク です。例は物事を非常に理解しやすくするはずです。私がこのリストを持っているとしましょう:removeArrayList::remove List<Integer> list = new ArrayList<>(); // 2, 4, 6, 5, 5 list.add(2); list.add(4); list.add(6); list.add(5); list.add(5); そして、私は偶数であるすべての要素を削除したいと思います。私はそれをできた: Iterator<Integer> iter = list.iterator(); while (iter.hasNext()) { int elem = iter.next(); if (elem % 2 == 0) { iter.remove(); } } または: list.removeIf(x -> x % 2 == 0); 結果は同じですが、実装は大きく異なります。はのiteratorビューなので、ArrayListを呼び出すたびremoveに、基になるものArrayListを「良好」な状態にする必要があります。つまり、内部配列は実際に変更されます。この場合も、の呼び出しごとにremove、System::arrayCopy内部で呼び出しが行われます。 …
9 java  java-8  iterator 

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; } …

1
リフレクションでJIT最適化を打ち破る
並行性の高いシングルトンクラスのユニットテストをいじるとき、次の奇妙な動作に遭遇しました(JDK 1.8.0_162でテスト済み)。 private static class SingletonClass { static final SingletonClass INSTANCE = new SingletonClass(0); final int value; static SingletonClass getInstance() { return INSTANCE; } SingletonClass(int value) { this.value = value; } } public static void main(String[] args) throws NoSuchFieldException, IllegalAccessException { System.out.println(SingletonClass.getInstance().value); // 0 // Change the instance to a …

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 …

2
java.net.SocketException:Spring Restテンプレートで接続がリセットされる
ここで奇妙な問題があります。 以下のコードは、クライアント側でtomcatサーバーを再起動するまで正常に機能しています。同じコードの最新のwarファイルでTomcatサーバー(クライアントプログラムがwarファイルにある)を再起動すると、以下のエラーがスローされます。JDK 8を使用しています。 以下はサンプルコードです。ブラウザから、以下のプログラムで使用しているURLから応答を得ることができます。しかし、JavaプログラムまたはPostmanを使用してもデータを取得できません。 package com.example.demo; import org.springframework.boot.CommandLineRunner; import org.springframework.stereotype.Component; import org.springframework.web.client.RestTemplate; @Component public class TestService implements CommandLineRunner{ @Override public void run(String... args) throws Exception { download(); } private void download() { System.out.println("Started download"); try{ RestTemplate restTemplate = new RestTemplate(); String url = "https://www.nseindia.com/live_market/dynaContent/live_watch/stock_watch/niftyStockWatch.json"; byte[] forObject = restTemplate.getForObject(url, byte [].class); …

6
POJOでパブリックプロパティのゲッター/セッターを複製する方法
〜60個のプロパティで自動生成されるPOJOがあります。これは、ゲッター/セッターを含まないavro 1.4で生成されます。 オブジェクト間の単純な変換を提供するために使用するライブラリは、適切に機能するためにゲッター/セッターのようなメソッドを必要とします。 POJOを手動でオーバーライドしてすべてのゲッター/セッターを手動で作成せずにゲッター/セッターを複製する方法はありますか? public class BigGeneratedPojo { public String firstField; public int secondField; ... public ComplexObject nthField; } public class OtherObject { private String reprOfFirstFieldFromOtherObject; private ComplexObject reprOfFirstFieldFromOtherObject; public String getReprOfFirstFieldFromOtherObject() { ... standard impl ... }; public void setReprOfFirstFieldFromOtherObject() { ... standard impl ... }; } 欲望は次のようなコードを書くことです: Mapper<BigGeneratedPojo, …

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, …

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