gpt4 book ai didi

java - 是否有与 C# linq let 等效的 java lambda 表达式?

转载 作者:搜寻专家 更新时间:2023-11-01 01:26:18 24 4
gpt4 key购买 nike

是否有与 let 设置等效的 java 8 lambda 表达式?例如,我将如何使用 Java 8 lambda 表达式编写此 c# linq 表达式?

String[] lines = new String[]{"Porky.Pig", "Darth.Vader", "Donald.Duck", "George Lucas"};
(from l in lines
let p = l.IndexOf('.')
where p >= 0
select new
{
FirstName = l.Substring(0, p),
LastName = l.Substring(p + 1)
}).Dump();

我只想评估 l.IndexOf('.') 一次。我想到的最接近的是:

 String[] lines = new String[]{"Porky.Pig", "Darth.Vader", "Donald.Duck", "George Lucas"};
Arrays.stream(lines)
.filter(x -> x.indexOf('.') > 0)
.map(x -> {
int p = x.indexOf('.');
return new Person (x.substring(0, p), x.substring( p + 1));
});

哪里:

public class Person {
public Person(String firstName, String lastName)
{
}
}

好的,根据 Shlomi Borovitz 的回答中的建议,我想到了这个,它利用了这个 Pair

String[] lines = new String[]{"Porky.Pig", "Darth.Vader", "Donald.Duck", "George Lucas"};
Arrays.stream(lines)
.map(x -> Pair.of(x, x.indexOf('.')))
.filter(x -> x.getRight() > 0)
.map(x -> new Person (x.getLeft().substring(0, x.getRight()), x.getLeft().substring( x.getRight() + 1)));

最佳答案

没有元组肯定是个问题。但是,如果我们在问题中使用 Person 的声明并采纳@Ulugbek Umirov 关于使用 String.split 的建议,这是一个相当简洁的解决方案:

List<Person> persons = Arrays.stream(lines)
.map(s -> s.split("\\."))
.filter(arr -> arr.length > 1)
.map(arr -> new Person(arr[0], arr[1]))
.collect(Collectors.toList());

不确定 Dump 的作用,我随意选择将 Person 对象收集到 List 中。

关于java - 是否有与 C# linq let 等效的 java lambda 表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23795376/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com