我有一组InternetAddress recipients是我的收件人.我需要将它转换为Set.我用了
Set<String> reci = new HashSet<>();
for(InternetAddress recipient : recipients){
reci.add(recipient.toString());
}
Run Code Online (Sandbox Code Playgroud)
哪个工作正常,是否可以避免使用循环并使用java 8 map和stream执行此操作.我尝试了以下但是没有用.
recipients.stream().map(String::new).collect(Collectors.toSet());
Run Code Online (Sandbox Code Playgroud)
这给出了错误'无法解析构造函数字符串'.
我试图压扁地图但不丢失钥匙.
我想拥有的东西:
Map<K, Collection<V>> keyToValuesMap = ...;
Stream.flattenCollection(keyToValuesMap).forEach((k,v) -> print(k, v));
Run Code Online (Sandbox Code Playgroud)
其中,v表示集合中对应于每个值的每个值k.
一个等效的旧学校Java代码将是:
for (Map.Entry<K, Collection<V>> entry : keyToValuesMap.entrySet())
{
K k = entry.getKey();
for (V v : entry.getValue())
{
print(k, v);
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,这个问题不仅仅是对值进行流式处理,因为它key会丢失,如下所示:keyToValuesMap.entrySet().stream().flatMap(keyValuesEntry -> keyValuesEntry.getValue().stream()).forEach(v -> printJustV(v));
*这print只是该对的一个示例动作.
*我在StreamEx中搜索过这样的API ,但找不到.我确信我会在那里找到它......
我想知道是否有一种更优雅的方式来编写以下代码,它利用了一些流,lambdas和方法引用的组合:
final boolean valid = StringUtils.hasText(obj.getFirstName())
&& StringUtils.hasText(obj.getLastName())
&& StringUtils.hasText(obj.getGender())
&& StringUtils.hasText(obj.getDob());
Run Code Online (Sandbox Code Playgroud)
理想情况下,它看起来像这样:
final boolean valid =
something(StringUtil::hasText,
obj.getFirstName(),
obj.getLastName(),
obj.getGender(),
obj.getDob());
Run Code Online (Sandbox Code Playgroud)
也许:
final boolean valid =
something(StringUtil::hasText, obj,
Type::getFirstName(),
Type::getLastName(),
Type::getGender(),
Type::getDob());
Run Code Online (Sandbox Code Playgroud)
显然你可以把所有的getter放到List中,然后使用一个流,但这看起来很罗嗦.在我看来,可能有库函数在JRE中或者在Spring或Apache中执行类似的操作.
我有按学生排序的对象列表id:
List<Student> arraylist = new ArrayList<>();
arraylist.add(new Student(1, "Chaitanya", 26));
arraylist.add(new Student(2, "Chaitanya", 26));
arraylist.add(new Student(3, "Rahul", 24));
arraylist.add(new Student(4, "Ajeet", 32));
arraylist.add(new Student(5, "Chaitanya", 26));
arraylist.add(new Student(6, "Chaitanya", 26));
Run Code Online (Sandbox Code Playgroud)
我想使用流并只删除学生age等于的前三个元素26.你能帮帮我吗?
我们如何使用优化此流来收集集合的嵌套级别和根级别.
final Set<String> groupedUsers = new HashSet<>();
groups.stream().forEach(group -> {
groupedUsers.add(group.getTeamLeadId());
groupedUsers.addAll(group.getTeamMemberIds().stream().collect(Collectors.toSet()));
});
Run Code Online (Sandbox Code Playgroud) 我有一个包含多行的文件.每行都可以转换为JSONObject.
示例行,
{"name": "a", "age": 28}
{"name": "b", "age": 20}
{"name": "c", "age": 30}
Run Code Online (Sandbox Code Playgroud)
我正在使用新IO读取此文件
Files.lines(path)
Run Code Online (Sandbox Code Playgroud)
我想使用流并将每一行转换为JSONObject,如,
JSONObject obj = new JSONObject(line);
Run Code Online (Sandbox Code Playgroud)
我没有得到如何使用流和lambda.有什么办法吗?
在回答我的问题用户nullpointer建议在这里 - /sf/answers/3773415831/如何循环可以转换为流方式使用IntStream.iterate.
我有一个类似的for循环条件,我迭代
void printMultiples(int number, int threshold) {
for (int i = number; ; i = i + threshold) {
if (i < threshold) {
break;
} else {
System.out.println(i);
}
}
}
Run Code Online (Sandbox Code Playgroud)
试图将其转换为
IntStream.iterate(number, i -> i + number).forEach(System.out::println);
^^
// Non-short-circuit operation consumes the infinite stream
Run Code Online (Sandbox Code Playgroud)
上面的代码中有一个IDE警告.我也尝试使用检查倍数IntStream.range,下面打印所有数字
IntStream.range(number, threshold).forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud) 我有一个练习要解决.我有一个Fox类,它有名字和颜色字段.我的练习是按颜色找出狐狸的频率.
因此我创建了一个HashMap,其中String属性将是狐狸名称,而Integer将是它本身的出现:
Map<String, Integer> freq = new HashMap<>();
Run Code Online (Sandbox Code Playgroud)
完成后,我一直在尝试用流编写代码,但我正在努力做到这一点.我写了这样的东西:
foxes.stream()
.map(Fox::getColor)
.forEach()
//...(continued later on);
Run Code Online (Sandbox Code Playgroud)
,其中狐狸是一个清单.
我的问题基本上是语法.如果颜色没有出现,我想做一些事情
freq.put(Fox::getName, 1)
Run Code Online (Sandbox Code Playgroud)
其他
freq.replace(Fox::getName, freq.get(Fox::getName) + 1)
Run Code Online (Sandbox Code Playgroud)
我该怎么把它放在一起?
我有一个2-D的int数组,以及一个带有指向其中一行的参数的方法.我想Set在该行的元素上返回非零值,并且我想在没有for循环的情况下执行此操作.所以这就是我尝试过的:
public Set<Integer> getNeighbors(int node) {
assert node >= 0 && node < numNodes : "getNeighbors(): Invalid node parameter given: " + node + ".";
return Arrays.stream(matrix[node]).filter(n->n>0).collect(Collectors.toSet());
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,我得到一个编译时错误,有点难以解析:
有任何想法吗?
private static final String ALPHABET = "abcdefghijklmnopqrstuvwxyz";
SortedSet<Character> set= new TreeSet<Character>();
for (int i = 0; i < ALPHABET.length(); i++) {
set.add(new Character(ALPHABET.charAt(i)));
}
Run Code Online (Sandbox Code Playgroud)
我想用Java 8方式转换这个for循环.如果使用流可能会更好.输出将是包含Character的"set"对象.