Если посмотреть на ваше требование, название метода, positionOfItemByName
не будет подходящим. С точки зрения исполнения не имеет значения, какое имя вы выберете. Тем не менее, имя должно быть как можно более информативным.
Ниже приведен лог c для удовлетворения ваших требований:
public static int countOfItemByNameAndPosition(Item[] array, Item item) {
List<Item> arr = new ArrayList<Item>(Arrays.asList(array));
int cpt = 0;
int index = arr.indexOf(item);
if (index != -1) {
for (int i = 0; i < arr.size() && i <= index; i++) {
if (arr.get(i).name.equals(item.name)) {
cpt++;
}
}
}
return cpt;
}
Демо
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
class Item {
String name;
public Item(String name) {
this.name = name;
}
@Override
public String toString() {
return "Item [name=" + name + "]";
}
}
public class Main {
public static void main(String[] args) {
Item item0 = new Item("nameA");
Item item1 = new Item("nameB");
Item item2 = new Item("nameB");
Item item3 = new Item("nameB");
Item item4 = new Item("nameC");
Item item5 = new Item("nameC");
Item item6 = new Item("nameB");
Item[] array = { item0, item1, item2, item3, item4, item5, item6 };
System.out.println(countOfItemByNameAndPosition(array, item2));
System.out.println(countOfItemByNameAndPosition(array, item6));
System.out.println(countOfItemByNameAndPosition(array, item5));
}
public static int countOfItemByNameAndPosition(Item[] array, Item item) {
List<Item> arr = new ArrayList<Item>(Arrays.asList(array));
int cpt = 0;
int index = arr.indexOf(item);
if (index != -1) {
for (int i = 0; i < arr.size() && i <= index; i++) {
if (arr.get(i).name.equals(item.name)) {
cpt++;
}
}
}
return cpt;
}
}
Выход:
2
4
2
Использование Stream API:
public static int countOfItemByNameAndPosition(Item[] array, Item item) {
List<Item> arr = new ArrayList<Item>(Arrays.asList(array));
return (int) IntStream.range(0, arr.indexOf(item)+1).filter(i -> item.name.equals(arr.get(i).name)).count();
}
Демо
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.stream.IntStream;
class Item {
String name;
public Item(String name) {
this.name = name;
}
@Override
public String toString() {
return "Item [name=" + name + "]";
}
}
public class Main {
public static void main(String[] args) {
Item item0 = new Item("nameA");
Item item1 = new Item("nameB");
Item item2 = new Item("nameB");
Item item3 = new Item("nameB");
Item item4 = new Item("nameC");
Item item5 = new Item("nameC");
Item item6 = new Item("nameB");
Item[] array = { item0, item1, item2, item3, item4, item5, item6 };
System.out.println(countOfItemByNameAndPosition(array, item2));
System.out.println(countOfItemByNameAndPosition(array, item6));
System.out.println(countOfItemByNameAndPosition(array, item5));
}
public static int countOfItemByNameAndPosition(Item[] array, Item item) {
List<Item> arr = new ArrayList<Item>(Arrays.asList(array));
return (int) IntStream.range(0, arr.indexOf(item) + 1).filter(i -> item.name.equals(arr.get(i).name)).count();
}
}
Вывод:
2
4
2
Не стесняйтесь комментировать в случай каких-либо сомнений / проблем.