Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

java.util.NoSuchElementException: List contains no element matching the predicate

Tags:

android

kotlin

Android Studio 3.6

 val reversedEventList: List<Event> = (response.body() as List<Event>).reversed()
                Debug.d(TAG, "loadEvents: reversedEventList(" + reversedEventList.size + ")")
                val lastEvent: Event = reversedEventList.last {
                    it.info?.deviceId.equals(
                        DeviceUtil.deviceId,
                        true
                    ) && it.type == Type.CALL_WAITRESS
                }
Debug.d(TAG, "loadEvents: lastEvent = $lastEvent)")

And here logcat:

MainViewModel( 5086): loadEvents: reversedEventList(338)
MainViewModel( 5086): loadEvents: lastEvent = Event{id = 366, orgn = 17, type = CALL_WAITRESS, started = 1566750174, finished = 1566750194, closeUser = 1, info = Info{isCash=false, isDiscount=false, deviceId = 41c2d0af61254f94a948882c7613d873}, user = '0', room = 1, table = 66, place = 1, closeInfo = CloseInfo{expectedResponceMinutes=0}})

Nice.

In the next test case I force set empty list

val reversedEventList: List<Event> = ArrayList<Event>()

And now I get error:

MainViewModel( 7932): loadEvents: reversedEventList(0)
11-12 15:01:44.789 E/AndroidRuntime( 7932): FATAL EXCEPTION: main
11-12 15:01:44.789 E/AndroidRuntime( 7932): Process: debug, PID: 7932
11-12 15:01:44.789 E/AndroidRuntime( 7932): java.util.NoSuchElementException: List contains no element matching the predicate.
11-12 15:01:44.789 E/AndroidRuntime( 7932):     at MainViewModel$loadEvents$1.invokeSuspend(MainViewModel.kt:180)
11-12 15:01:44.789 E/AndroidRuntime( 7932):     at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
11-12 15:01:44.789 E/AndroidRuntime( 7932):     at kotlinx.coroutines.DispatchedTask.run(Dispatched.kt:241)
11-12 15:01:44.789 E/AndroidRuntime( 7932):     at android.os.Handler.handleCallback(Handler.java:739)
11-12 15:01:44.789 E/AndroidRuntime( 7932):     at android.os.Handler.dispatchMessage(Handler.java:95)
11-12 15:01:44.789 E/AndroidRuntime( 7932):     at android.os.Looper.loop(Looper.java:148)
11-12 15:01:44.789 E/AndroidRuntime( 7932):     at android.app.ActivityThread.main(ActivityThread.java:5417)
11-12 15:01:44.789 E/AndroidRuntime( 7932):     at java.lang.reflect.Method.invoke(Native Method)
11-12 15:01:44.789 E/AndroidRuntime( 7932):     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
11-12 15:01:44.789 E/AndroidRuntime( 7932):     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)
like image 354
Alexei Avatar asked Sep 17 '25 07:09

Alexei


1 Answers

Maybe using lastOrNull would be an option for you:

val eventList: List<String> = emptyList()
val lastEvent: String? = eventList.reversed().lastOrNull { "test" == it }
like image 87
Andre Classen Avatar answered Sep 19 '25 01:09

Andre Classen