我有一个字符串a的列表,并试图找到a的所有元素a按照某种规则与a的另一个元素b匹配,然后创建一个映射
,其中包含所有的a->所有匹配的b。
详细内容:
Pairs(x,y) = forEach(a,b in A)
where (a != b && P(a, b))
generatePairXY(a, b)
Map(x -> List(y)) = group(Pairs(x,y)) by x
这种方法的问题是,我首先需要构造一个庞大的对列表,如果我的数据集只有几百万字,那么它可能会耗尽内存。
List<String> list = ...;
Map<String, List<String>> map =
list.stream()
.collect(Collectors.toMap(a -> a, a -> list.stream()
.filter(b -> P(a,b))
.collect(Collectors.toList()))
);
其思想是为原始列表的每个字符串创建一个映射,其中包含一个键,以及一个值,该值是匹配该键的所有字符串的过滤列表。
编辑:
下面是一个完整的工作示例,在该示例中,如果两个字符串不相等但长度相同,则谓词P返回true:
package com.test;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
public class Test
{
public static boolean P (String a, String b)
{
return a.length() == b.length() && !a.equals(b);
}
public static void main (String[] args)
{
List<String> list = new ArrayList<String>();
list.add ("aaa");
list.add ("bbb");
list.add ("ccc");
list.add ("cccc");
list.add ("dddd");
list.add ("ddd");
Map<String, List<String>> map =
list.stream()
.collect(Collectors.toMap(a -> a, a -> list.stream()
.filter(b -> P(a,b))
.collect(Collectors.toList()))
);
for (String key : map.keySet ()) {
System.out.print (key + ": " );
for (String value : map.get(key)) {
System.out.print (value+ " ");
}
System.out.println("");
}
}
}
aaa: bbb ccc ddd
ccc: aaa bbb ddd
bbb: aaa ccc ddd
ddd: aaa bbb ccc
dddd: cccc
cccc: dddd
从隐藏元素不再占用空间的意义上来说,在iOS中制作流畅布局的正确方法是什么? 我有一个表格视图,每个单元格中有一个定制的详细类型的视图,带有标题、副标题和一行额外信息: 额外信息最多可以是三对图标和一个带有值的标签。单元内所有视图的布局都是使用AutoLayout完成的,没有丢失或不明确的约束。 我想实现的是,当值为0时,图标和标签不会显示,右侧的视图会向左移动。 如果我只使用< code>set
我目前正在读O'reilly的《Java 8 Lambdas》是一本非常好的书。我遇到了这样一个例子。 我有一个 这会产生正确的输出。 我的问题是将reduce方法视为最后一个参数,即二进制运算符 我的问题是这个参数用于哪个?如果我改变 如果我传递NULL,则输出相同,然后返回N.P.E。 for此参数用于什么? 更新 为什么如果我在上运行它,我会收到不同的结果? 第一次运行。 第二次运行 第三次
本文向大家介绍你是怎么做数据分析的?相关面试题,主要包含被问及你是怎么做数据分析的?时的应答技巧和注意事项,需要的朋友参考一下 考察的是数据分析的能力。主要从以下4个维度回答,结合具体的数据分析来进行阐述: 明确数据分析的目的; 确定数据分析的方法以及获取所需要的数据; 对数据进行预处理,并进行分析; 输出数据分析报告,提出相应建议。
本文向大家介绍你是怎么做用户调研的?相关面试题,主要包含被问及你是怎么做用户调研的?时的应答技巧和注意事项,需要的朋友参考一下 考察用户调研和访谈的能力,可以从以下几个维度分析: 明确调研目的,选择调研方式:用户访谈(电话、线下、圆桌访谈、微信)、问卷调研; 确定调研的对象,怎么找到你需要调研的对象,即调研的目的是什么,根据目的是寻找调研对象; 准备好调研问题和提纲; 调研结果收集和分析,形成调研