Java 8 Streamを使用したDataProviderクエリのIndexOutOfBoundsException

マイケル・ケメルツェル:

フィルタリングされたデータをバックエンドから遅延ロードしたい。バックエンドから1つの要素を返すフィルターを適用する(またはフィルターを適用しない)と、すべてが正常に機能します。

OutOfBoundsException取得したアイテムが1を超えると、クラッシュまたはスローし始めます。実装のガイドラインとして公式のVaadinドキュメントを使用しました

例外はでスローされます。filter()Stream-APIのメソッド。例外の意味も認識しています。値にアクセスしようとするインデックスは、リストの最大サイズ以上ですが、これを修正する方法がわかりません。最初のクエリの制限をlimit-1に設定しても、修正されませんでした。

コールバックの2番目のクエリで問題が発生していると思いますが、問題が何なのかわかりません。Stream-APIの問題ですか、それとも2番目のコールバッククエリが正しく機能していませんか?

public DataProvider<T, String> createLazyLoadingProvider(List<T> data) {
        DataProvider<T, String> lazyLoadingProvider
                = DataProvider.fromFilteringCallbacks(query -> {
                    // First Query
                    final int offset = query.getOffset();
                    final int limit = query.getLimit();
                    final String filter = query.getFilter().orElse("");

                    return data
                            .stream()
                            .skip(offset)
                            .limit(limit)
                            .filter(e -> {
                                return e.toString().startsWith(filter);
                            });


                }, query -> {
                    // Second query
                    return (int) data.stream()
                            .filter(e -> {
                                return e.toString().startsWith(filter);
                            })
                            .count();
                });
        return lazyLoadingProvider;
    }

生成する:

First Query
Offset: 0
Limit: 100
Callback-Filter: 3
Full Size of Data: 6005
From backend fetched Items: 5
-----------
Second Query
Offset: 0
Limit: 2147483647
Callback-Filter: 3
Max fetchable Items with filter applied: 381

スタックトレース:

java.lang.IndexOutOfBoundsException:インデックス5の長さ5の範囲外。java.base/ jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:64)at java.base / jdk.internal.util.Preconditions.outOfBoundsCheckIndex( Preconditions.java:70)java.base / jdk.internal.util.Preconditions.checkIndex(Preconditions.java:248)at java.base / java.util.Objects.checkIndex(Objects.java:372)at java.base /java.util.ArrayList.get(ArrayList.java:458)at com.vaadin.flow.data.provider.DataCommunicator.lambda $ getJsonItems $ 3(DataCommunicator.java:611)at java.base / java.util.stream。 IntPipeline $ 1 $ 1.accept(IntPipeline.java:180)at java.base / java.util.stream.Streams $ RangeIntSpliterator.forEachRemaining(Streams.java:104)at java.base / java.util.Spliterator $ OfInt.forEachRemaining( Spliterator.java:699)java.base / java.util.stream.AbstractPipeline.copyInto(AbstractPipeline。java:484)java.base / java.util.stream.AbstractPipeline.wrapAndCopyInto(AbstractPipeline.java:474)at java.base / java.util.stream.ReduceOps $ ReduceOp.evaluateSequential(ReduceOps.java:913)at java .base / java.util.stream.AbstractPipeline.evaluate(AbstractPipeline.java:234)at java.base / java.util.stream.ReferencePipeline.collect(ReferencePipeline.java:578)at com.vaadin.flow.data.provider .DataCommunicator.getJsonItems(DataCommunicator.java:613)at com.vaadin.flow.data.provider.DataCommunicator.collectChangesToSend(DataCommunicator.java:556)at com.vaadin.flow.data.provider.DataCommunicator.flush(DataCommunicator.java :473)com.vaadin.flow.data.provider.DataCommunicator.lambda $ requestFlush $ 2f364bb9 $ 1(DataCommunicator.java:421)at com.vaadin.flow.internal.StateTree.lambda $ runExecutionsBeforeClientResponse $ 1(StateTree.java:364 )java.base / java.util。ArrayList.forEach(ArrayList.java:1540)at com.vaadin.flow.internal.StateTree.runExecutionsBeforeClientResponse(StateTree.java:361)at com.vaadin.flow.server.communication.UidlWriter.encodeChanges(UidlWriter.java:392) com.vaadin.flow.serverのcom.vaadin.flow.server.communication.UidlRequestHandler.writeUidl(UidlRequestHandler.java:116)のcom.vaadin.flow.server.communication.UidlWriter.createUidl(UidlWriter.java:182)で.communication.UidlRequestHandler.synchronizedHandleRequest(UidlRequestHandler.java:89)at com.vaadin.flow.server.SynchronizedRequestHandler.handleRequest(SynchronizedRequestHandler.java:40)at com.vaadin.flow.server.VaadinService.handleRequest(VaadinService.java:1540 )com.vaadin.flow.server.VaadinServlet.service(VaadinServlet.java:246)at javax.servlet.http.HttpServlet.service(HttpServlet.java:750)at org.eclipse.jetty.servlet。org.eclipse.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1617)のorg.eclipse.jetty.websocket.server.WebSocketUpgradeFilter.doFilter(WebSocketUpgradeFilter.java:のServletHolder.handle(ServletHolder.java:760) 226)org.eclipse.jetty.servlet.ServletHandler $ CachedChain.doFilter(ServletHandler.java:1604)at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:545)at org.eclipse.jetty.server .handler.ScopedHandler.handle(ScopedHandler.java:143)(org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:536)at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java) :127)org.eclipse.jetty.server.handler.ScopedHandler.nextHandle(ScopedHandler.java:235)at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:1592)at org.eclipse。 jetty.server.handler。ScopedHandler.nextHandle(ScopedHandler.java:233)at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1296)at org.eclipse.jetty.server.handler.ScopedHandler.nextScope(ScopedHandler.java: 188)org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:485)at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:1562)at org.eclipse.jetty.server .handler.ScopedHandler.nextScope(ScopedHandler.java:186)at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1211)at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler .java:141)org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:221)at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:146)at org。 eclipse.jetty.server.handler。gzip.GzipHandler.handle(GzipHandler.java:717)(org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:146)(org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper。 java:127)org.eclipse.jetty.server.Server.handle(Server.java:500)at org.eclipse.jetty.server.HttpChannel.lambda $ handle $ 1(HttpChannel.java:386)at org.eclipse。 jetty.server.HttpChannel.dispatch(HttpChannel.java:562)at org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:378)at org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java: 270)org.eclipse.jetty.io.AbstractConnection $ ReadCallback.succeeded(AbstractConnection.java:311)at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java:103)at org.eclipse.jetty.io org.eclipse.jetty.ioの.ssl.SslConnection $ DecryptedEndPoint.onFillable(SslConnection.java:543)。ssl.SslConnection.onFillable(SslConnection.java:398)at org.eclipse.jetty.io.ssl.SslConnection $ 2.succeeded(SslConnection.java:161)at org.eclipse.jetty.io.FillInterest.fillable(FillInterest.java :103)org.eclipse.jetty.io.ChannelEndPoint $ 2.run(ChannelEndPoint.java:117)at org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.runTask(EatWhatYouKill.java:336)at org.eclipse org.eclipse.jetty.util.thread.strategy.EatWhatYouKill.tryProduce(EatWhatYouKill.java:171)org.eclipse.jetty.utilの.jetty.util.thread.strategy.EatWhatYouKill.doProduce(EatWhatYouKill.java:313) org.eclipse.jetty.util.thread.ReservedThreadExecutor $ ReservedThreadExecutor.java:388)のorg.eclipse.jetty.util.thread.QueuedThreadPoolの.thread.strategy.EatWhatYouKill.run(EatWhatYouKill.java:129) org.eclipse.jetty.util.threadの.runJob(QueuedThreadPool.java:806)。QueuedThreadPool $ Runner.run(QueuedThreadPool.java:938)at java.base / java.lang.Thread.run(Thread.java:834)

エリック・ルンメ:

オフセットと制限を適用するにフィルタリングする必要があります。

詳細:

アイテムがApple, Cucumber, Lemon, Lettuce, Linseed, Lime, Tangerine, Tomatoあり、フィルターにで始まるアイテムのみを含めるとしLます。

カウントクエリは、カウント4(Lemon, Lettuce, Linseed, Limeを返します

ここで、グリッドには最初の2つのアイテムが必要なので、オフセット0と制限2を送信します。

コードで行うことは、最初の2つの項目を選択し、Apple, Cucumberそれらをフィルター処理して、0項目を返すことです。

それがする必要があるのは、取得するアイテムをフィルタリングし、Lemon, Lettuce, Linseed, Limeオフセット0と制限2を取得することLemon, Lettuceです。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

Java 8 StreamsAPIを使用したコレクションに対する「含む」種類のクエリ

分類Dev

Java 8:Stream.of()を使用して、カンマ区切りの文字列をジェネリックリストに

分類Dev

Javaの8:DateTimeParseException

分類Dev

Java 8 Lambdaを使用したArrayListの作成

分類Dev

Java8を使用した整数のリストの合計

分類Dev

Java 7ではなくJava 8でジェネリックを使用したタイプエラー

分類Dev

以前の要素の値を使用して各要素で操作を実行した後、Java 8 Stream Reduceを使用してリストを返す

分類Dev

リストを使用したJavaの8 -flatten地図

分類Dev

java 8 reduce with parallelStream and stream

分類Dev

Grouping By in java 8 Stream API

分類Dev

Java 8を使用したクラスの変換

分類Dev

Java8のJAXBを使用したUTF-8文字

分類Dev

Java8ストリームを使用したリストのリファクタリング作成

分類Dev

Java8ストリームを使用したリストのリファクタリング作成

分類Dev

how to parallelize a java program with Stream Java 8

分類Dev

DBを操作するときに、直接hibernate / sqlクエリではなくJava 8 Stream APIを使用する理由

分類Dev

Android NのJava 8 Stream API

分類Dev

最新のJava 8機能を使用して2つのHTTPリクエストを非同期で作成する方法

分類Dev

Java 8を使用したポリモーフィズムのリファクタリング

分類Dev

AspectJ + Java 8 + ctrl使用中のエラー変数をクリック

分類Dev

新しいJava8JavascriptエンジンNashornを使用しようとしたためのJava7アプリケーションエラー

分類Dev

作曲のJava 8 Optionals

分類Dev

Java 8の述語

分類Dev

Java 8の学習

分類Dev

Java8の素数

分類Dev

Sorted()を使用したJava 8 parallelStream()

分類Dev

Java8を使用したPhonegapCLI

分類Dev

trycatchを使用したJava8述語

分類Dev

Java8のLambdaを使用したリストのdouble値の合計

Related 関連記事

  1. 1

    Java 8 StreamsAPIを使用したコレクションに対する「含む」種類のクエリ

  2. 2

    Java 8:Stream.of()を使用して、カンマ区切りの文字列をジェネリックリストに

  3. 3

    Javaの8:DateTimeParseException

  4. 4

    Java 8 Lambdaを使用したArrayListの作成

  5. 5

    Java8を使用した整数のリストの合計

  6. 6

    Java 7ではなくJava 8でジェネリックを使用したタイプエラー

  7. 7

    以前の要素の値を使用して各要素で操作を実行した後、Java 8 Stream Reduceを使用してリストを返す

  8. 8

    リストを使用したJavaの8 -flatten地図

  9. 9

    java 8 reduce with parallelStream and stream

  10. 10

    Grouping By in java 8 Stream API

  11. 11

    Java 8を使用したクラスの変換

  12. 12

    Java8のJAXBを使用したUTF-8文字

  13. 13

    Java8ストリームを使用したリストのリファクタリング作成

  14. 14

    Java8ストリームを使用したリストのリファクタリング作成

  15. 15

    how to parallelize a java program with Stream Java 8

  16. 16

    DBを操作するときに、直接hibernate / sqlクエリではなくJava 8 Stream APIを使用する理由

  17. 17

    Android NのJava 8 Stream API

  18. 18

    最新のJava 8機能を使用して2つのHTTPリクエストを非同期で作成する方法

  19. 19

    Java 8を使用したポリモーフィズムのリファクタリング

  20. 20

    AspectJ + Java 8 + ctrl使用中のエラー変数をクリック

  21. 21

    新しいJava8JavascriptエンジンNashornを使用しようとしたためのJava7アプリケーションエラー

  22. 22

    作曲のJava 8 Optionals

  23. 23

    Java 8の述語

  24. 24

    Java 8の学習

  25. 25

    Java8の素数

  26. 26

    Sorted()を使用したJava 8 parallelStream()

  27. 27

    Java8を使用したPhonegapCLI

  28. 28

    trycatchを使用したJava8述語

  29. 29

    Java8のLambdaを使用したリストのdouble値の合計

ホットタグ

アーカイブ