标签: lambda

Java Lambda表达式

我目前正在JDK 1.8上学习lambda表达式.我遇到了一些我发现我不理解的代码.

这是代码:

import java.util.Arrays;
import java.util.Comparator;
import java.util.List;
import java.lang.Comparable;

/**
 * Hello world!
 *
 */
public class App
{
    public static void main( String[] args ) throws Exception
    {

        List<String> list = Arrays.asList("a", "b", "c");
        sort(list, Comparable::<String>compareTo);

    }

    interface MyComparable {
        public <T extends Comparable<T>> int compare(T obj1, T obj2 );
    }

    public static <T extends Comparable<T>> void sort(List<T> list, MyComparable comp) {

        int n = comp.compare("5","2");
        System.out.println(n);
    }

}
Run Code Online (Sandbox Code Playgroud)

comp.compare("5", "3")最终执行"5".compareTo("2").我的理解是编译器需要找到一个具有相同签名的静态方法

public <T extends …
Run Code Online (Sandbox Code Playgroud)

java lambda java-8 method-reference

-3
推荐指数
1
解决办法
810
查看次数

如何根据两个条件从通用列表中获取项目?

我有一个自定义类型的通用列表,我试图找回一个类型的实例.我已尝试使用两个条件"FirstOrDefault"和"Where",但两个条件都给我相同的错误信息("运算符'&&'不能应用于'lambda表达式'的操作数'和'lambda表达'")

他们来了:

// FirstOrDefault
UnitItemCodeItemID uicii = 
    unitItemCodeItemIDList
        .FirstOrDefault((u => u.Unit == _unit) && (d => d.Description == desc));


// Where
UnitItemCodeItemID uicii = 
    unitItemCodeItemIDList
        .Where((u => u.Unit == _unit) && (d => d.Description == desc));
Run Code Online (Sandbox Code Playgroud)

我不知道它是否相关,但课程是:

public class UnitItemCodeItemID
{
    public string Unit { get; set; }
    public string Description { get; set; }
    public string ItemCode { get; set; }
    public int ItemID { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

c# generics lambda generic-list

-3
推荐指数
1
解决办法
56
查看次数

有没有办法在IF中写入lambda表达式并捕获所有内容?

我的理解是,如果我在lambda表达式中使用语法[&],那么我的lambda表达式可以访问函数的周围变量和参数.

因此,我尝试编写以下(简化)代码

if ( [&]() 
     {
        bool b = false;
        return b;
     }
   )
  {
     // Do something in TRUE part of if statement
  }
Run Code Online (Sandbox Code Playgroud)

但我得到错误"类型'的值'lambda at ...'不能在上下文中转换为'bool'

希望对此问题有所了解.

非常感谢,D

c++ lambda

-3
推荐指数
1
解决办法
96
查看次数

error:使用find_if时,expression必须是可修改的左值

我有两个主要包含字符串的类向量,我试图跟踪两个向量之间匹配的次数.我int在两个公共课程之一(另一个职能所必需的)中保留了一个计数器.但是,std::find_if似乎不允许我修改或分配此计数器变量.

以下是std::find_if搜索算法:

for (Vector1& v1 : vector1) {
    auto res = find_if(vector2.begin(), vector2.end(),
        [=](Vector2 v2) {
            if (v2.code == v1.code) {
                v1.counter++; // <-- where the error occurs
                return true;
            }
            else
                return false;
        }
    );
}
Run Code Online (Sandbox Code Playgroud)

我似乎无法弄清楚为什么会这样; 我猜测find_if算法的第三个参数是一个const值.但那不应该影响我vector1,对吧?

我使用嵌套的远程for循环,它完美地工作.但是,我想尝试使用这个find_if算法......

c++ lambda

-3
推荐指数
1
解决办法
247
查看次数

使用sorted进行Java Lambda不区分大小写排序的最佳方法

我正在查看Lambda排序方法,我似乎无法轻易找到不区分大小写的属性.这是代码.

@org.junit.Test
public void StackOverflowQuestion() throws Exception {

    List<String> sut = Arrays.asList("Xena","Scarlet","Joseph", "adam");
    Stream<String> output = sut.stream().sorted();

    output.forEach(trans2 -> System.out.println(trans2.toString()));

}
Run Code Online (Sandbox Code Playgroud)

我的输出是Joseph Scarlet Xena亚当

谢谢您的帮助.

java sorting lambda java-8

-3
推荐指数
1
解决办法
1977
查看次数

lambda funtion返回整个列表而不是元素

我有一个问题,我正在尝试使用Lambda函数从列表中打印出1个特定元素.

我有一个列表,我想使用Lambda过滤,我想从列表中只打印出"Python":

languages = ["HTML", "JavaScript", "Python", "Ruby"]
Run Code Online (Sandbox Code Playgroud)

执行时,我将整个列表打印到控制台!我不知道我在这里做错了什么.

languages = ["HTML", "JavaScript", "Python", "Ruby"]

print filter(lambda x: x[2], languages)
Run Code Online (Sandbox Code Playgroud)

有什么建议?

python lambda list filter

-3
推荐指数
1
解决办法
64
查看次数

python中的lambda说列表对象不可调用

my_list = [3, 4, 7, 2, 9, 170]

f = filter(lambda x: x%2==0, my_list)

g = f(my_list)
Run Code Online (Sandbox Code Playgroud)

有一个问题,这个lambda启动"列表对象不可调用"错误.这是一个非常简单的lambda,所以我不太清楚我在这里做错了什么

python lambda list filter

-3
推荐指数
1
解决办法
905
查看次数

感到困惑的是C#lambda表达式

我一直在学习lambda表达式,当我终于可以阅读/理解=>运算符时,我很高兴,这对我来说意味着"在哪里"

List<int> a = new List<int>(){0,1,2,1,3,4,5,6,7,8,9};
IEnumerable<int> b = a.FindAll(x => x>=5);
foreach (int x in b)
Console.WriteLine(x);
Run Code Online (Sandbox Code Playgroud)

阅读上面这一行,个人有意义地把它读作"从这个列表中查找所有x的WHERE x大于或等于5",非常好.但后来我遇到了使用Select方法对lambda表达式的不同用法.

List<int> a = new List<int>(){0,1,2,1,3,4,5,6,7,8,9};
IEnumerable<int> b1 = a.Select(x => x*2);
foreach (int x in b)
Console.WriteLine(x);
Run Code Online (Sandbox Code Playgroud)

有了这个,之前读取这个操作符的方法没有意义,因为对我来说这个代码做了"For each x return x*2",这与前一个案例中的同一个操作符的功能非常不同. .我知道.FindAll和.Select之间的区别在于处理输入和输出参数的不同方式,但我在谈论在lambda表达式中使用operator =>.

c# lambda

-3
推荐指数
1
解决办法
1002
查看次数

Java 8 Stream并在执行缩减时维护索引

这些天我一直在试图弄清楚如何使用Java 8流API执行减少并同时维护索引.这是一个例子:

我有以下字符串:

String charSequence = "kjsfjsfajdsfjsaaaaaasssddfddddbbbdddaaa";
Run Code Online (Sandbox Code Playgroud)

我想通过Stream操作返回三元组 (I, N, C)

哪里:

  • C 是一个角色
  • N 是一些事件 - 应该是最大的
  • I 是第一次出现的字符串的索引(如果有多个字符串,则为第一个)

例子:

  • "ddaaaacccjcccccjjj" 回报 (10, 5, c)
  • "ddaaacccaaa"的第一次出现"aaa"2这样的结果将是: (2, 3, a)

一般来说,如果我可以返回所有具有长度为3的子串的字符,那将是很好的,这样结果就是两个三元组(I, N, C) C.但这是可选的.如果我得到第一个三重权利,我可以自己前进.

更新:

我不是在寻找替代解决方案.我可以用另一个API很好地实现它.我试图理解为什么维护索引是困难的,或者为什么不能这样做,如果是这样的话.反对的好论据很好.

java lambda mapreduce java-8 java-stream

-3
推荐指数
1
解决办法
1023
查看次数

Java 8将字符串列表转换为映射列表

我有List<List<String>>。我想根据内部List的特定元素将其转换为Map。

我试过了

ddList.stream().flatMap(x -> x.stream()
            .collect(Collectors.toMap(Function.identity(), String::length)));
Run Code Online (Sandbox Code Playgroud)

它不起作用。这是怎么了?

java collections lambda java-8

-3
推荐指数
1
解决办法
72
查看次数