GVKun编程网logo

在C#中,带有lambdas的Enumerable.Select的Java等效项是什么?(c# lambda select)

7

在本文中,我们将详细介绍在C#中,带有lambdas的Enumerable.Select的Java等效项是什么?的各个方面,并为您提供关于c#lambdaselect的相关解答,同时,我们也将为您带来

在本文中,我们将详细介绍在C#中,带有lambdas的Enumerable.Select的Java等效项是什么?的各个方面,并为您提供关于c# lambda select的相关解答,同时,我们也将为您带来关于.NET的ManualResetEvent和WaitHandle的Java等效项、c# – IEnumerable.Cast()vs在IEnumerable.Select()中的投射、c# – IEnumerable与IObservable的不同之处是什么?、c# – 我应该投射在我的lambda还是投射IEnumerable?的有用知识。

本文目录一览:

在C#中,带有lambdas的Enumerable.Select的Java等效项是什么?(c# lambda select)

在C#中,带有lambdas的Enumerable.Select的Java等效项是什么?(c# lambda select)

假设我在C#中有一个对象:

public class Person{    public string Name{get;set;}    public int Age{get;set;}}

要在C#中从此列表中选择名称,请执行以下操作:

List<string> names = person.Select(x=>x.Name).ToList();

在Java 8中我将如何做同样的事情?

答案1

小编典典

如果您有类似的人员列表,List<Person> persons;您可以说

List<String> names  =persons.stream().map(x->x.getName()).collect(Collectors.toList());

或者

List<String> names  =persons.stream().map(Person::getName).collect(Collectors.toList());

但是,收集到一个List或其他Collection被intented与传统的API只在你需要这样的使用Collection。否则,您将继续使用流的操作,因为您可以使用a做Collection更多的事情,而无需中间存储Strings,例如

persons.stream().map(Person::getName).forEach(System.out::println);

.NET的ManualResetEvent和WaitHandle的Java等效项

.NET的ManualResetEvent和WaitHandle的Java等效项

我想知道Java是否提供了.NET的ManualResetEvent和WaitHandle类的等效类,因为我想编写代码,除非触发事件,否则它将在给定的超时时间内阻止。

据我所知,WaitHandle和ManualResetEvent的.NET类提供了一个不错的,无麻烦的接口,据我所知,该接口也是线程安全的,那么Java必须提供什么?

c# – IEnumerable.Cast()vs在IEnumerable.Select()中的投射

c# – IEnumerable.Cast()vs在IEnumerable.Select()中的投射

假设我有一个IEnumerable< int>我希望这些被转换成ASCII等价的字符.

对于一个整数,它只是(char)我,所以总是有collection.Select(i =>(char)i),但我认为这将是一个更清洁的使用collection.Cast().

任何人都可以解释为什么当我使用collection.Cast< char>()而不是与collection.Select(i =>(char)i)时,我得到一个InvalidCastException?

编辑:有趣的是,当我调用collection.OfType< char>()我得到一个空集.

解决方法

Cast< T>和OfType< T>方法仅执行引用和拆箱转换.所以他们不能将一个值类型转换为另一个值类型.

该方法在非通用IEnumerable接口上运行,因此它们基本上是从IEnumerable< object>到IEnumerable< T&gt ;.所以,你不能使用Cast< T>的原因从IEnumerable< int>到IEnumerable< char>这是同样的原因,你不能把一个Boxed int到一个char.

基本上,Cast< char>在您的示例中失败,因为以下失败:

object ascii = 65;
char ch = (char)ascii;   <- InvalidCastException

有关更多详情,请参阅Jon Skeet的优秀EduLinq post.

c# – IEnumerable与IObservable的不同之处是什么?

c# – IEnumerable与IObservable的不同之处是什么?

我很好奇IEnumerable与IObservable的不同之处.我分别理解了pull和push模式,但是C#在内存等方面如何通知订阅者(对于IObservable)它应该在内存中接收下一位数据来处理?观察到的实例如何知道它有一个数据的变化推送到订阅者.

我的问题来自于我正在从文件中读取行的测试.该文件总共约为6Mb.

标准时间:4.7s,行:36587

Rx拍摄时间:0.68秒,行数:36587

Rx如何能够大量改进文件中每条线的正常迭代?

private static void ReadStandardFile()
{
    var timer = Stopwatch.StartNew();
    var linesProcessed = 0;

    foreach (var l in ReadLines(new FileStream(_filePath,FileMode.Open)))
    {
        var s = l.Split(',');
        linesProcessed++;
    }

    timer.Stop();

    _log.DebugFormat("Standard Time Taken: {0}s,lines: {1}",timer.Elapsed.ToString(),linesProcessed);
}

private static void ReadRxFile()
{
    var timer = Stopwatch.StartNew();
    var linesProcessed = 0;

    var query = ReadLines(new FileStream(_filePath,FileMode.Open)).ToObservable();

    using (query.Subscribe((line) =>
    {
        var s = line.Split(',');
        linesProcessed++;
    }));

    timer.Stop();

    _log.DebugFormat("Rx Time Taken: {0}s,linesProcessed);
}

private static IEnumerable<string> ReadLines(Stream stream)
{
    using (StreamReader reader = new StreamReader(stream))
    {
        while (!reader.EndOfStream)
            yield return reader.ReadLine();
    }
}

解决方法

我的预感是你看到的反映操作系统缓存文件的行为.我想如果你颠倒了调用的顺序,你会看到类似的速度差异,只是换了.

您可以通过执行一些预热运行或在测试每个文件之前使用File.copy将输入文件复制到临时文件来改进此基准测试.这样文件就不会“热”,你会得到一个公平的比较.

c# – 我应该投射在我的lambda还是投射IEnumerable?

c# – 我应该投射在我的lambda还是投射IEnumerable?

在我的项目中,我有一个实现IMyClass的MyClass.我需要通过转换其他项目的列表来返回IMyClass列表.为了简单起见,假设我可以通过将另一个项目传递到其构造函数(即新的MyClass(item))中来创建MyClass.

考虑以下两行(据我所知)产生相同的结果:

var option1 = items.Select(item => new MyClass(item)).Cast<IMyClass>().ToList()
var option2 = items.Select(item => new MyClass(item) as IMyClass).ToList()

在我看来,#1选项将需要一个双重枚举,一次将所有项目投射到我的界面,一次产生列表.如果我是对的,那么选项#2会更聪明.然而,我从来没有看到任何代码使用的选项#2,而且我倾向于假设我不够聪明地提出一些聪明的东西,其余的C#社区没有.

在旁注中,我认为选项2更美观,但这只是我.

我的问题是:是我的选择#2一个更好的想法,我认为是?有没有什么问题我失踪或其他原因我想要坚持选项#1?或者我可能比较两个愚蠢的想法,当有一个更智能的第三个,我完全失踪?

解决方法

我会去选择3:
var option3 = items.Select<Foo,IMyClass>(item => new MyClass(item))
                   .ToList()

或者,不要使用,只能正常投掷:

var option4 = items.Select(item => (IMyClass) new MyClass(item))
                   .ToList()

这两个都比使用Cast更清晰.

呵呵,和.NET 4(由于协方差)的C#4,你可以在ToList调用中放一个类型参数:

var option5 = items.Select(item => new MyClass(item))
                   .ToList<IMyClass>()

我们今天的关于在C#中,带有lambdas的Enumerable.Select的Java等效项是什么?c# lambda select的分享就到这里,谢谢您的阅读,如果想了解更多关于.NET的ManualResetEvent和WaitHandle的Java等效项、c# – IEnumerable.Cast()vs在IEnumerable.Select()中的投射、c# – IEnumerable与IObservable的不同之处是什么?、c# – 我应该投射在我的lambda还是投射IEnumerable?的相关信息,可以在本站进行搜索。

本文标签: