- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我需要找出属于另一个元素的最大值。给你举个例子最清楚了。
我有List<String> lines
包含以下数据:
1, 1, A, Aaa ...
1, 2, A, Aaa ...
1, 4, A, Aaa ...
2, 5, B, Bbb ...
2, 3, B, Bbb ...
3, 6, C, Ccc ...
4, 7, D, Ddd ...
5, 8, E, Eee ...
1, 9, A, Aaa ...
4, 10, D, Ddd ...
需要明确的是,两对数字永远不会相同,所以你永远不会得到:
1, 9, A, Aaa ...
1, 9, B, Bbb ...
我的目标是提取属于第一行的第二行的最大值的行。确切地说,这些行:
1, 9, A, Aaa ...
2, 5, B, Bbb ...
3, 6, C, Ccc ...
4, 10, D, Ddd ...
5, 8, E, Eee ...
为了向您证明这不是作业,我使用多个 for-loop
制作了解决方案找到最大值并将其存储到变量中。但是我不知道它是否有效,因为测试了大量数据( 200 000+
)。
// List "lines" is declared above
List<List<String>> data = new ArrayList<>();
List<List<String>> maxValues = new ArrayList<>();
// clear and separate to clear comparable parts
for (String s: lines) {
String parts[] = s.trim().replace("\"", "").split(";");
List newList = Arrays.asList(parts);
data.add(newList);
}
// naïve algorithm to find the maximum dependent to the another one
// not sure if working
for (List l: data) {
int id = Integer.parseInt(l.get(0).toString());
int max = 0;
List<String> tempMaxValues = new ArrayList<>();
for (int i=0; i<data.size(); i++) {
if (Integer.parseInt(l.get(0).toString()) == id) {
int temp = Integer.parseInt(l.get(1).toString());
if (temp > max) {
max = temp;
tempMaxValues = l;
}
}
}
maxValues.add(tempMaxValues);
}
此外,我还需要进行更多计算。只有使用 Stream
才能达到我想要的结果或者更简单的方法?即使在我的代码中我也会迷失和困惑。
最佳答案
用功能术语来说,您想要的是将每个列表值按其第一个元素进行分组,并仅选择第二个元素的最大值。使用 Stream API,您可以:
groupingBy(classifier, downstream)
收集器按列表的第一个元素进行分组。maxBy(comparator)
仅选择收集值中的最大值。在这种情况下,比较器将每个列表的第二个值作为 int
进行比较。借助内置 comparingInt
.maxBy
返回 Optional
如果没有收集任何值,我们通过调用 collectingAndThen(finisher)
来包装它其中整理器检索 Optional
通过调用 Optional.get()
值(我们知道在这种情况下至少有一个值将被分类) .values()
从结果 Map<String, List<String>>
并且,因为这会返回 Collection<List<String>>
,我们创建一个 ArrayList
以此为基础。示例代码:
List<List<String>> maxValues = new ArrayList<>(
data.stream()
.collect(Collectors.groupingBy(
l -> l.get(0),
Collectors.collectingAndThen(
Collectors.maxBy(Comparator.comparingInt(l -> Integer.parseInt(l.get(1)))),
Optional::get
)
))
.values()
);
结果
[1, 9, A, Aaa], [2, 5, B, Bbb], [3, 6, C, Ccc], [4, 10, D, Ddd], [5, 8, E, Eee]]
用于您的示例数据。
关于java - List 中基于另一个元素的最大值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36105656/
我想使用 R 预定义这样的列表 DATA<-list( list(list(),list(),list()), list(list(),list(),list()), list(list(),l
如何将一个列表添加到另一个列表,返回一个列表的列表? foo :: [a] -> [a] -> [[a]] 例如,我想要的结果是: foo [1,2] [3,4] 将是 [[1,2], [3,4]]。
我还没有在这里找到类似问题的解决方案,所以我会寻求你的帮助。 有 2 个列表,其中之一是列表列表: categories = ['APPLE', 'ORANGE', 'BANANA'] test_re
这个问题不同于Converting list of lists / nested lists to list of lists without nesting (这会产生一组非常具体的响应,但无法解决
原始列表转换为 List正好。为什么原始列表的列表不能转换为 List 的列表? { // works List raw = null; List wild = raw; } {
在下面的代码中,get()被调用并将其结果分配给类型为 List> 的变量. get()返回 List>并在类型参数为 T 的实例上调用设置为 ? ,所以它应该适合。 import java.util
原始列表转换为 List正好。为什么原始列表的列表不能转换为 List 的列表? { // works List raw = null; List wild = raw; } {
在insufficiently-polymorphic 作者说: def foo[A](fst: List[A], snd: List[A]): List[A] There are fewer way
我有下面的代码有效。 class ListManipulate(val list: List, val blockCount: Int) { val result: MutableList>
关闭。这个问题需要多问focused 。目前不接受答案。 想要改进此问题吗?更新问题,使其仅关注一个问题 editing this post . 已关闭 5 年前。 Improve this ques
在 scala (2.9) 中转换列表列表的最佳方法是什么? 我有一个 list : List[List[A]] 我想转换成 List[A] 如何递归地实现这一点?或者还有其他更好的办法吗? 最佳答案
我编写了这个函数来确定给定元素是否存储在元组列表的列表中,但目前它只搜索第一个列表。我将如何搜索其余列表? fun findItem (name : command, ((x,y)::firstlis
我创建了一个类名 objectA,它有 4 个变量:约会时间;字符串文本;变量 1,变量 2 我需要创建一个 ObjectA() 列表。然后首先按时间对它们进行分组,其次按 var1,然后按 var2
我有一套说法 char={'J','A'} 和列表的列表 content = [[1,'J', 2], [2, 'K', 3], [2, 'A', 3], [3,'A', 9], [5, 'J', 9
我有以下列表 List >>> titles = new ArrayList >>> ();我想访问它的元素,但我不知道该怎么做.. 该列表有 1 个元素,它又包含 3 个元素,这 3 个元素中的
转换 List[List[Long]] 的最佳方法是什么?到 List[List[Int]]在斯卡拉? 例如,给定以下类型列表 List[List[Long]] val l: List[List[Lo
我有一个来自 Filereader (String) 的 List-List,如何将其转换为 List-List (Double):我必须返回一个包含 line-Array 的第一个 Values 的
我收集了List> 。我需要将其转换为List> 。这是我尝试过的, List> dataOne = GetDataOne(); var dataTwo = dataOne.Select(x => x
这个问题在这里已经有了答案: Cannot convert from List to List> (3 个答案) 关闭 7 年前。 我没有得到这段代码以任何方式编译: List a = new Ar
这个问题在这里已经有了答案: Cannot convert from List to List> (3 个答案) 关闭 7 年前。 我没有得到这段代码以任何方式编译: List a = new Ar
我是一名优秀的程序员,十分优秀!