RFR: 8329760: Add indexOf(Predicate<? super E> filter) to java..util.List interface [v6]
Evemose
duke at openjdk.org
Fri Apr 19 12:32:19 UTC 2024
> **Subject**
> Addition of Predicate-based `indexOf` and `lastIndexOf` methods to `java.util.List`
>
> **Motivation**
> The motivation behind this proposal is to enhance the functionality of the `List` interface by providing a more flexible way to find the index of an element. Currently, the `indexOf` and `lastIndexOf` methods only accept an object as a parameter. This limits the flexibility of these methods as they can only find the index of exact object matches.
>
> The proposed methods would accept a `Predicate` as a parameter, allowing users to define a condition that the desired element must meet. This would provide a more flexible and powerful way to find the index of an element in a list.
>
> Here is a brief overview of the changes made in this pull request:
>
> 1. Added the `indexOf(Predicate<? super E> filter)` method to the `List` interface.
> 2. Added the `lastIndexOf(Predicate<? super E> filter)` method to the `List` interface.
> 3. Implemented these methods in all non-abstract classes that implement the `List` interface.
>
> The changes have been thoroughly tested to ensure they work as expected and do not introduce any regressions. The test cases cover a variety of scenarios to ensure the robustness of the implementation.
>
> For example, consider the following test case:
>
> List<String> list = new ArrayList<>();
> list.add("Object one");
> list.add("NotObject two");
> list.add("NotObject three");
>
> int index1 = list.indexOf(s -> s.contains("ct t"));
> System.out.println(index1); // Expected output: 1
> int index2 = list.lastIndexOf(s -> s.startsWith("NotObject"));
> System.out.println(index2); // Expected output: 2
>
>
> Currently, to achieve the same result, we would have to use a more verbose approach:
>
> int index1 = IntStream.range(0, list.size())
> .filter(i -> list.get(i).contains("ct t"))
> .findFirst()
> .orElse(-1);
> System.out.println(index1); // Output: 1
> int index2 = IntStream.range(0, list.size())
> .filter(i -> list.get(i).startsWith("NotObject"))
> .reduce((first, second) -> second)
> .orElse(-1);
> System.out.println(index2); // Output: 2
>
>
> I believe these additions would greatly enhance the functionality and flexibility of the `List` interface, making it more powerful and user-friendly. I look forward to your feedback and am open to making any necessary changes based on your suggestions.
>
> Thank you for considering this proposal.
>
> Best regards
>
> PS: In ...
Evemose has updated the pull request incrementally with 14 additional commits since the last revision:
- Update LinkedList.java
- Update LinkedList.java
- Reformat LinkedList.java
- Removed trailing whitespace in Collections.java
- Update CopyOnWriteArrayList.java
- Reformated imports in Vector.java
- Reformated imports in CopyOnWriteArrayList.java
- Removed on-demand import from SpliteratorTraversingAndSplittingTest.java
- Update ListFactories.java
- Update ReverseOrderListView.java
- ... and 4 more: https://git.openjdk.org/jdk/compare/5beec920...d7f5e97e
-------------
Changes:
- all: https://git.openjdk.org/jdk/pull/18639/files
- new: https://git.openjdk.org/jdk/pull/18639/files/5beec920..d7f5e97e
Webrevs:
- full: https://webrevs.openjdk.org/?repo=jdk&pr=18639&range=05
- incr: https://webrevs.openjdk.org/?repo=jdk&pr=18639&range=04-05
Stats: 59 lines in 7 files changed: 33 ins; 6 del; 20 mod
Patch: https://git.openjdk.org/jdk/pull/18639.diff
Fetch: git fetch https://git.openjdk.org/jdk.git pull/18639/head:pull/18639
PR: https://git.openjdk.org/jdk/pull/18639
More information about the core-libs-dev
mailing list