java 8 Lambda 如何打印这个a的值?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java 8 Lambda 如何打印这个a的值?相关的知识,希望对你有一定的参考价值。

Map<Integer, String> a = new TreeMap<Integer, String>();
a.put(1, "a");
a.put(2, "b");
//old

for (Integer c : a.keySet())
System.out.println(a.get(c));

//新的要如何写

/*
一个接口,如果只有一个显式声明的抽象方法,
那么它就是一个函数接口。
一般用@FunctionalInterface标注出来(也可以不标)
*/
public interface Inteface1
//可以不用abstract修饰
public abstract void test(int x,int y);
//public void test1();//会报错,不能有两个方法,尽管没有使用abstract修饰
public boolean equals(Object o);//equals属于Object的方法,所以不会报错


public class Test
public static void main(String args[])
Inteface1 f1=(int x,int y)->System.out.println(x+y);;
f1.test(3,4);

Inteface1 f2=(int x,int y)-> System.out.println("Hello Lambda!\\t the result is " +(x+y));;
f2.test(3,4);

参考技术A map.forEach((IntegerParam,Stringparam)->System.out.println(IntegerParam + "" + Stringparam)); 参考技术B Arrays.asList("a", "b", "c").forEach(e -> System.out.println(e));

如何有条件地缩放 Keras Lambda 层中的值?

【中文标题】如何有条件地缩放 Keras Lambda 层中的值?【英文标题】:How to conditionally scale values in Keras Lambda layer? 【发布时间】:2019-04-09 13:30:59 【问题描述】:

输入张量rnn_pv 的形状为(?, 48, 1)。我想缩放这个张量中的每个元素,所以我尝试使用Lambda 层,如下所示:

rnn_pv_scale = Lambda(lambda x: 1 if x >=1000 else x/1000.0 )(rnn_pv)

但它来了错误:

TypeError: Using a `tf.Tensor` as a Python `bool` is not allowed. Use `if t is not None:` instead of `if t:` to test if a tensor is defined, and use TensorFlow ops such as tf.cond to execute subgraphs conditioned on the value of a tensor.

那么实现这个功能的正确方法是什么?

【问题讨论】:

我相信你想使用一些索引的x.get_shape()(从我看到的x.get_shape()[0]),因为你正在将tf.Tensor对象与integer(1000)进行比较 【参考方案1】:

您不能使用 Python 控制流语句(例如 if-else 语句)在模型定义中执行条件操作。相反,您需要使用 Keras 后端中定义的方法。由于您使用 TensorFlow 作为后端,您可以使用 tf.where() 来实现:

import tensorflow as tf

scaled = Lambda(lambda x: tf.where(x >= 1000, tf.ones_like(x), x/1000.))(input_tensor)

或者,要支持所有后端,您可以创建一个掩码来执行此操作:

from keras import backend as K

def rescale(x):
    mask = K.cast(x >= 1000., dtype=K.floatx())
    return mask + (x/1000.0) * (1-mask)

#...
scaled = Lambda(rescale)(input_tensor)

更新:支持所有后端的另一种方法是使用K.switch 方法:

from keras import backend as K

scaled = Lambda(lambda x: K.switch(x >= 1000., K.ones_like(x), x / 1000.))(input_tensor)

【讨论】:

以上是关于java 8 Lambda 如何打印这个a的值?的主要内容,如果未能解决你的问题,请参考以下文章

Java 8 lambda表达式

[Java 8] Lambda表达式对递归的优化(上) - 使用尾递归 .

Java 学习总结(188)—— Java 8 方法引用使用总结

Java 8 中的 Lambda 表达式

[Java 8] Lambda表达式对递归的优化(下) - 使用备忘录模式(Memoization Pattern) .

Java1.8-Lambda