查找所有包含最大值的索引

时间:2018-10-13 16:34:50

标签: java list max

我有一个Java列表列表。应该获取每个列表的最后一项并将其放置在名为lastItems的另一个列表中,然后它将获取lastItems的最大值及其索引。这是代码:

List<List<Integer>> myList = new ArrayList<>();
myList.add(new ArrayList<Integer>());
myList.add(new ArrayList<Integer>());
myList.add(new ArrayList<Integer>());

myList.get(0).add(1);
myList.get(0).add(2);
myList.get(0).add(3);
myList.get(1).add(4);
myList.get(1).add(5);
myList.get(1).add(6);
myList.get(2).add(7);
myList.get(2).add(8);
myList.get(2).add(9); 
if (!myList.contains(Collections.EMPTY_LIST) && !myList.contains(null) && myList.stream().allMatch(l -> l.size() == L.get(0).size())) {             
     int[] lastItems = myList.stream().mapToInt(x -> x.get(x.size() - 1)).toArray();
     int maxValue = Arrays.stream(lastItems).max().getAsInt();
     int index = IntStream.range(0, lastItems.length).filter(i -> maxValue == lastItems[i]).findFirst().orElse(-1));
     System.out.println(maxValue);
}

但是问题是IntStream.range(0, lastItems.length).filter(i -> maxValue == lastItems[i]).findFirst().orElse(-1))仅找到列表中第一个maxValue的索引,但是我想找到所有可能包含maxValue的索引(例如在{ {1}},索引= 0,索引= 2包含list = [9, 5, 9])。我该怎么办?

2 个答案:

答案 0 :(得分:2)

为什么不保持简单?找到mq_unlink之后,请使用简单的for循环找出最大值的索引。

maxValue

答案 1 :(得分:1)

您可以这样做

int[] maxIndices = IntStream.range(0, lastItems.length)
    .filter(i -> lastItems[i] == maxValue)
    .toArray();

如果要获取所有最大值的索引,则没有必要使用findFirst。只需将匹配的值收集到容器中即可。

如果您只想打印它,那么它将是

IntStream.range(0, lastItems.length)
.filter(i -> lastItems[i] == maxValue)
.forEach(System.out::println);