Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8329760

Add indexOf(Predicate<? super E> filter) to java.util.List interface

XMLWordPrintable

      A DESCRIPTION OF THE PROBLEM :
      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:

      Added the indexOf(Predicate<? super E> filter) method to the List interface.
      Added the lastIndexOf(Predicate<? super E> filter) method to the List interface.
      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.



            smarks Stuart Marks
            webbuggrp Webbug Group
            Votes:
            0 Vote for this issue
            Watchers:
            3 Start watching this issue

              Created:
              Updated: