我想过滤Person
类的列表,最后使用Streams
映射到Java中的一些匿名类。我可以在C#中很容易地做同样的事情。
人类
class Person
{
public int Id { get; set; }
public string Name { get; set; }
public string Address { get; set; }
}
List<Person> lst = new List<Person>();
lst.Add(new Person() { Name = "Pava", Address = "India", Id = 1 });
lst.Add(new Person() { Name = "tiwari", Address = "USA", Id = 2 });
var result = lst.Select(p => new { Address = p.Address, Name = p.Name }).ToList();
现在,如果我要访问新创建的类型的任何属性,则可以使用下面提到的语法轻松访问。
Console.WriteLine( result[0].Address);
理想情况下,我应该使用循环遍历结果。
我知道在Java中我们已经为ToList收集并为Select映射。但是我无法选择Person类的两个属性。我该怎么办Java
好吧,您可以将Person实例映射到匿名类的实例,例如
class Person {
int id;
String name, address;
public Person(String name, String address, int id) {
this.id = id;
this.name = name;
this.address = address;
}
public int getId() {
return id;
}
public String getName() {
return name;
}
public String getAddress() {
return address;
}
}
你可以做
List<Person> lst = Arrays.asList(
new Person("Pava", "India", 1), new Person("tiwari", "USA", 2));
List<?> result = lst.stream()
.map(p -> new Object() { String address = p.getAddress(); String name = p.getName(); })
.collect(Collectors.toList());
但是您可能会注意到,它并不那么简洁,更重要的是,result变量的声明不能引用匿名类型,这使得匿名类型的实例几乎不可用。
当前,lambda表达式是唯一支持声明隐式变量的Java功能,该隐式变量可以是匿名的。例如,以下方法将起作用:
List<String> result = lst.stream()
.map(p -> new Object() { String address = p.getAddress(); String name = p.getName(); })
.filter(anon -> anon.name.startsWith("ti"))
.map(anon -> anon.address)
.collect(Collectors.toList());
问题内容: 我可以在C#中做到这一点: 例如在Java中 我如何查询这样的ArrayList?谢谢。 问题答案: Java 8引入了Stream API ,该API允许与Linq中的构造类似的构造。 例如,您的查询可以表示为: 如果存在默认值,您显然需要锻炼,在这种情况下,这似乎很奇怪,但是我已经展示了它,因为这就是您问题中的代码所做的。
问题内容: Java 在JavaScript中相当于什么? 问题答案: 简单的答案是没有这样的功能。 您拥有的最接近的东西是: 请注意,您 尤其 不想等待(例如在旋转循环中),因为您的浏览器几乎可以肯定会在单线程环境中执行JavaScript。
问题内容: 我需要实现在单击按钮60秒后才能运行的功能。请帮助,我使用了Timer类,但是我认为这不是最好的方法。 问题答案: “我使用了Timer类,但是我认为那不是最好的方法。” 其他答案假定您未在用户界面(按钮)上使用Swing。 如果您正在使用Swing,请 不要 使用它,因为它将冻结您的Swing应用程序。 相反,您应该使用。 有关更多信息和示例,请参见Java教程如何使用Swing计时
问题内容: 我想将Java中的类转换为C#,大部分更改已经完成,但是我不确定这部分。我想转换以下代码行: 我已经试过了: 但是它不能正常工作,因为GetBytes()期望翻倍。我不确定将其转换为双精度是否可以解决问题,所以我想在这里询问。 问题答案: 根据您的编码,您可以执行以下操作: 有关参考,请参见http://msdn.microsoft.com/zh- cn/library/ds4kkd5
问题内容: 在C#中,您可以执行以下操作: 是否有与此等效的Java? 问题答案: Java没有通过关键字向C#提供类型推断,因此尽管您可以创建匿名类型,但由于无法获取其属性,它们的效果不是很好。 因此,您可以像这样创建一个匿名类的实例: 但是由于是您无法在代码中访问的实例,并且已经创建了 匿名 类的实例,因此根据定义,没有办法显式引用该类。 在C#中,可以通过推断类型来解决此问题,但是在Java
问题内容: 我有以下用Java编写的代码。我需要与此等效的C#。 问题答案: 这里的C#代码等效于Java。