我有一个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]
)。我该怎么办?
答案 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);