Python和Scala和Java的语法对照表(持续更新中)
泛型
Scala | Java |
def func1(a:String,b:Long): Tuple2[String,Long] = val randomPrefixRdd=pairs.map(x=>func1(x._1,x._2)) |
// 第一步,给RDD中的每个key都打上一个随机前缀。 public Tuple2<String, Long>call(Tuple2<String, Long> lalala)throws Exception //这个地方使用了函数模板,在java中称为范型 JavaPairRDD<String,Long> randomPrefixRdd = pairs.mapToPair(func1); |
val localAggrRdd = randomPrefixRdd.reduceByKey(_+_) |
// 第二步,对打上随机前缀的key进行局部聚合。 public Long call(Long v1, Long v2) throws Exception }; |
def func2(tuple:Tuple2[Long,String]):Iterator[Tuple2[String,String]]={ val skewedRdd2 = rdd2.filter(v1=>v1._1.equals(skewedUserid)).flatMap(line=>func2(line)) |
// rdd2,就是那个所有key的分布相对较为均匀的rdd。 // 这里将rdd2中,前面获取到的key对应的数据,过滤出来,分拆成单独的rdd,并对rdd中的数据使用flatMap算子都扩容100倍。 // 对扩容的每条数据,都打上0~100的前缀。 JavaPairRDD<String, String> skewedRdd2 = rdd2.filter(new Function<Tuple2<Long, String>, Boolean>() { @Override public Boolean call(Tuple2<Long, String> v1) throws Exception { return v1._1.equals(skewedUserid); } }).flatMapToPair(new PairFlatMapFunction<Tuple2<Long, String>, String, String>() { @Override public Iterator<Tuple2<String, String>> call(Tuple2<Long, String> tuple) throws Exception { // Random random = new Random(); List<Tuple2<String, String>> list = new ArrayList<Tuple2<String, String>>(); for(int i = 0; i < 100; i++) { list.add(new Tuple2<String, String>(i+"_"+tuple._1,tuple._2)); } return list.iterator(); } } ); |
这里肯定有更简洁的泛型转换形式,上述只是一个初步的整理。
类型转化
Python2.7 | Scala | Java |
a=111 long(a) |
def func1(s:String):(Long,String)= { val strings=s.split(",") val ids=strings(0).toLong val great=strings(1) Tuple2.apply(ids,great) } |
JavaPairRDD<Long, String> rdd1 = sc.textFile(path1) String[] strings=s.split(","); Long ids = Long.valueOf(strings[0]); return Tuple2.apply(ids,greet); |
匿名函数-Lambda
Python | Scala | Java | |
传入多个参数 |
a = lambda x,y,z:(x+8)*y-z print(a(5,6,8)) |
object hello def main(args: Array[String]) // with multiple parameters |
|
lambda表达式后面传参 | (lambda x, y: x if x>y else y)(1, 2) |
object hello def main(args: Array[String]) } } |
|
lambda函数本身做为return的值 |
def add(n): return lambda x: x+n f = add(1) print(f(2)) |
无 | |
列表结合使用 |
L = [lambda x: x**2,\ print("------------------------------") |
val a=List(1,2,3,4) println(lists1(0)) |
|
字典配合使用 |
key = 'B' dic = { 'A': lambda: 2*2,\ 'B': lambda: 2*4,\ 'C': lambda: 2*6} print(dic[key]()) |
import scala.collection.immutable.HashMap var hashMap2 = HashMap("A"->2*2, "B"->2*4, "C"->2*6) var key = 'B' println(hashMap2("B")) |
|
结合map函数使用 |
lists1=[1,2,3,4] squares = map(lambda x: x**2, lists1) print(list(squares)) |
val lists1=List(1,2,3,4) val squares =lists1.map(x=>x*x) println(squares) |
|
a = lambda x:x[1] print(a([2,3,4])) |
map(_._2) |
||
a = lambda x,y:(x[1],y) print(a([2,3,4],5)) |
map(_._2, _) |
||
结合reduce函数使用 |
from functools import reduce def add(x, y) : # 两数相加 return x + y print(reduce(add, [1,2,3,4,5])) print(reduce(lambda x, y: x+y, [1,2,3,4,5])) |
val list = List(1,2,3,4,5) |
|
结合filter函数使用 | print(list(filter(lambda x: x%2==0, [1,2,3,4,5,6]))) |
val x=List.range(1,10) |
|
结合sorted函数使用 |
info = [('James',32), ('Alies',20), ('Wendy',25)] print(sorted(info, key=lambda age:age[1]))# 按照第二个元素,索引为1排序 |
val list=List(("James",32),("Alies",20),("Wendy",25)) println(list.sortBy(_._2)) |
|
reduce聚合(求和) | print(reduce(lambda x,y:sum([x,y]),range(1,101))) |
val result = List.range(1,101).reduce((x,y)=>(x+y)) println(result) |
|
map映射 | print(list(map(lambda x,y:sum([x,y]),range(1,101),range(1,101)))) |
val x = List.range(1,101) val y = List.range(1,101) val result1=x.zip(y).map(t => t._1 + t._2) val result2=(x,y).zipped.map(_ + _) println(result1) println(result2) |
|
要点 |
①lambda 函数不能包含命令, ②包含的表达式不能超过一个。 ③lambda 并不会带来程序运行效率的提高,只会使代码更简洁。 |
Reduce和Map区别
参数方面 | 作用规律 | |
map函数 | map()包含两个参数,第一个是参数是一个函数,第二个是序列(列表或元组)。其中,函数(即map的第一个参数位置的函数)可以接收一个或多个参数。 | 将传入的函数依次作用到序列的每个元素,每个元素都是独自被函数“作用”一次; |
reduce函数 | 第一个参数是函数,第二个是 序列(列表或元组)。但是,其函数必须接收两个参数。 | 将传人的函数作用在序列的第一个元素得到结果后,把这个结果继续与下一个元素作用(累积计算), 最终结果是所有的元素相互作用的结果。 |
map/reduce/foreach代码实例
函数 | 示例代码1(foreach模仿reduce效果) | 示例代码2(foreach模仿map效果) |
map |
val v = Vector(1,2,3,4) var sum = 0 var s = v.map(n => n+n) println(s) //输出:Vector(2, 4, 6, 8) |
如下面的 |
reduce |
val v2 = Vector(1,2,3,4) var v3 = v2.reduce((sum,n) => sum + n) println(v3) //输出:10 |
无 |
foreach |
val vv = Vector(1,2,3,4) var sum1 = 0//事先设定一个全局变量 vv.foreach( n => sum1 += n) println(sum1)//输出:10 |
object hello { def main(args:Array[String]) { var increase=(x:Int)=>x+1 val someNumbers = List( -11, -10, -5, 0, 5, 10) var c = someNumbers.map(increase) c.foreach((x:Int)=>print(x+" ")) println() c.map((x:Int)=>print(x+" ")) } } |
while循环
Python | Scala | Java |
x=10; while x<20: print("Value of x",x) x=x+1; |
var x=10; while( x < 20 ) { println( "Value of x: " + x ); x=x+1; } |
int x=10 while( x < 20 ) { System.out.print("value of x : " + x ); x++; System.out.print("\n"); } |
for循环
Python | Scala | Java |
lst = [1,2,3,4,5,6] for index,value in enumerate(lst): print ('%s,%s' % (index,value)) |
object Test { def main(args: Array[String]) { var a = 0; // for 循环 for( a <- 1 to 10){ println( "Value of a: " + a ); } } } |
public class Test { public static void main(String args[]) { for(int x = 10; x < 20; x = x+1) { System.out.print("value of x : " + x ); System.out.print("\n"); } } } |
List列表
Python | Scala | Java | |
---|---|---|---|
空List |
a = []
|
val a = List() //List[Nothing]
|
List<Integer> list = new ArrayList<Integer>(); |
Int |
a = [1,2,3,4,5]
|
val a = List(1,2,3,4,5)
|
Integer a[] = {1,2,5,6,9}; List<Integer> list = new ArrayList<>(); System.out.println(list.size()); Collections.addAll(list, a); |
String |
a = ["a", "b"]
|
val a: List[String] = List("Hello", "World")
|
List<String> list = new ArrayList<String>(); |
不同类型 |
a = [1,"Hello"]
|
val a = List(1, "Hello") //List[Any]
|
List<Integer> list = new ArrayList<Integer>(); list.add(1); |
2维 |
a = [[1,2,3], [4,5,6]]
|
val a = List(List(1,2,3), List(4,5,6))
|
|
索引 |
a[10]
|
a(10)
|
System.out.println(list1.get(1)) |
截取 |
a[0:2]
|
a.slice(0,2)
|
List<String>subList = list.subList(3,5); |
是否为空 |
not a a==[] len(a)==0
|
a.isEmpty
|
System.out.println(list1.isEmpty()); |
append |
a.append(6)
|
a :+ 6
|
list.add(1); |
连接 |
a.extend([4,5,6])
|
List.concat(List(1,2,3), List(4,5,6))
|
List<String> a=new ArrayList<String>(); List<String> b=new ArrayList<String>(); b.addAll(a) |
反转 |
a[::-1]
|
a.reverse
|
Collections.reverse(list1); System.out.println(list1); |
获取元素索引 |
aList = [123, 'xyz', 'runoob', 'abc'] aList.index( 'xyz' ) |
List("Mary","had","a","little","lamb").indexOf("little") | System.out.println(list1.indexOf(5)); |
HashMap
功能 | Python | Scala | Java |
---|---|---|---|
新建 |
map = {"one": 1, "two":2}
|
val map = Map("one"->1, "two"->2)
|
import java.util.*; HashMap<String, String> map = new HashMap<>(); |
val map = Map(("one", 1), ("two", 2))
|
|||
获取 |
map["one"]
|
map("one")
|
System.out.println(map.get("zhang"));//获取值 |
包含 |
"one" in map
|
map.contains("one")
|
System.out.println(map.containsKey("zhang")); |
添加 |
map["three"] = 3
|
map + ("three"->3)
|
map.put("zhang", "31"); |
删除 |
del map["three"]
|
map - "three"
|
System.out.println(map.remove("zhang")); |
keys |
map.keys()
|
map.keys
|
|
values |
map.values()
|
map.values
|
|
concat |
map1.update(map2)
|
map1 ++ map2
|
|
判空 |
if dict: print 'not Empty' |
val m1 = Map(3 -> "geeks", 1 -> "for", 2 -> "cs", 3 -> "geeks") val result = m1.isEmpty |
System.out.println(map.isEmpty());//判空 |
Set
Python | Scala | Java | |
---|---|---|---|
新建 |
|
val s = Set(1,2,3)
|
Set<Integer> set = new HashSet<Integer>(); |
添加 |
s.add(4)
|
s + 4
|
set.add(6); |
删除 |
s.remove(4)
|
s - 4
|
set.remove(9); |
是否为空 |
not s
|
s.isEmpty
|
HashSet hs1 = new HashSet(); System.out.println(hs1.isEmpty()); hs1.add("苹果"); hs1.add("梨"); System.out.println(hs1.isEmpty()); |
min |
min(s)
|
s.min
|
import java.util.HashSet; // printing the Set // getting minimum value |
max |
max(s)
|
s.max
|
同上 |
交集 |
x = set('spam') y = set(['h','a','m']) x & y # 交集 |
scala> Set(1,2,3) & Set(2,4) // &方法等同于interset方法 scala> Set(1,2,3) intersect Set(2,4) |
import java.util.HashSet; HashSet hs2 = new HashSet(); |
差集 |
x - y # 差集 |
scala> Set(1,2,3) -- Set(2,4) //得到 Set(1,3) scala> Set(1,2,3) &~ Set(2,4) scala> Set(1,2,3) diff Set(2,4) |
import java.util.HashSet; HashSet hs2 = new HashSet(); |
并集 |
>>> x.union(y) {'p', 'a', 's', 'm', 'h'} >>> x|y {'p', 'a', 's', 'm', 'h'} |
s1.union(s2)
|
import java.util.HashSet; import java.util.Iterator; public class Main { public static void main(String[] args) { //Set 集合存和取的顺序不一致。 HashSet hs1 = new HashSet(); hs1.add("世界军事1"); HashSet hs2 = new HashSet(); hs2.add("世界军事2"); hs1.addAll(hs2); Iterator it = hs1.iterator(); while (it.hasNext()) { System.out.println(it.next()); } } } |
s1 ++ s2
|
For loop
Python | Scala | Java | |
---|---|---|---|
Range |
for x in range(5): print(x)
|
for(x <- Range(1, 5)) println(x)
|
public class Main }; 其中Range类需要自定义 |
List |
for x in li: print(x)
|
for (x <- li) println(x)
|
import java.util.*; public class Main { List<String> strList = new ArrayList<>(); } |
Map |
for k, v in map1.items(): print(k,v)
|
for ((k,v) <- map1) println(k, v)
|
import java.util.*; public class Main //第一种:普遍使用,二次取值 } |
Range
Python | Scala | Java |
---|---|---|
range(1, 10) (inclusive, exclusive)
|
Range(1, 10) (inclusive, exclusive)
|
public class Main }; 其中Range类需要自定义 |
无 |
1 to 10 (inclusive, inclusive)
|
同上 |
无 |
1 until 10 (inclusive, exclusive)
|
同上 |
range(10) (exclusive)
|
无 | 同上 |
range(1, 10, 2)
|
1 to 10 by 2
|
同上 |
仅支持int |
1.0 to 10.0 by 0.5
|
同上 |
仅支持int |
'a' to 'g' by 2
|
同上 |
列表推导式-List Comprehension
Python | Scala | Java |
dogBreeds =["Doberman", "Yorkshire Terrier", "Dachshund","Scottish Terrier", "Great Dane","Portuguese Water Dog"] filteredBreeds=[breed for breed in dogBreeds if "Terrier" in breed and not breed.startswith('Yorkshire')] print(filteredBreeds) |
val dogBreeds = List("Doberman", "Yorkshire Terrier", "Dachshund","Scottish Terrier", "Great Dane","Portuguese Water Dog") val filteredBreeds = for {breed <- dogBreeds if breed.contains("Terrier") && !breed.startsWith("Yorkshire")} yield breed println(filteredBreeds) |
无 |
Main函数写法
Python | Scala | Java |
def main(): if __name__ == '__main__': |
object HelloWorld{ def main(args : Array[String]){ println("HelloWorld") } } |
public class HelloWorld { public static void main(String[] args) { System.out.println("Hello World" ); } } |
迭代器
Python | Scala | Java |
import sys # 引入 sys 模块 |
object Test { def main(args: Array[String]) { val it = Iterator("Baidu", "Google", "Runoob", "Taobao") while (it.hasNext){ println(it.next()) } } } |
import java.util.ArrayList; import java.util.Iterator; import java.util.List; import static java.lang.Thread.yield; public class Main { public static void main(String[] args) { List<String> lst = new ArrayList<String>(); lst.add("Baidu"); lst.add("Google"); lst.add("Runoob"); lst.add("Taobao"); Iterator<String> iterator = lst.iterator(); //iterator.hasNext()如果存在元素的话返回true while(iterator.hasNext()) { //iterator.next()返回迭代的下一个元素 System.out.println(iterator.next()); } } |
生成器
Python | Scala | Java |
g = (x * x for x in range(10)) print(g) |
val result=for(x <-List.range(1, 10))yield (x) println(result.getClass().getSimpleName()) |
import static java.lang.Thread.yield; Generator在java标准库中没有, 需要另外自定义 |
case class
Scala | Java |
|
|
凡是上面记载不全的地方,一定要注意掌握[12]
Reference
[1]给Python程序员的Scala入门教程
[2]Scala学习日志(三)——轻便神奇的for推导式
[3]python中lambda的用法
[4]Scala编程 Lambda Expressions
[5]scala中的Lambda表达式
[6]map函数和reduce函数的区别
[7]Lambda Expression in Scala
[8]Scala 中的foreach和map方法比较
[9]遍历HashMap的四种方式
[10]Java中HashMap的用法
[11]java 两个list合并
[12]使用intellij查看scala变量的具体类型
Python和Scala和Java的语法对照表(持续更新中)相关推荐
- Java自学视频整理(持续更新中...)
1.Java基础视频 <张孝祥JAVA视频教程>完整版[RMVB](东西网) 历经5年锤炼(史上最适合初学者入门的Java基础视频)(传智播客) 张孝祥2010年贺岁视频:Java高新技术 ...
- 《LeetCode 热题 HOT 100》Java答案汇总版---持续更新中
<LeetCode 热题 HOT 100>Java答案汇总版-持续更新中 个人认为<LeetCode 热题 HOT 100>中的题目特别适合算法新手进行一个入门的刷题,而且作者 ...
- 《python编程从入门到实践》python入门级-学习笔记(1-2章)——持续更新中
CSDN的小伙伴们你们好~从今天起我开始自学编程了. 恭喜你关注到一个成长型账号. 一以来作为美术出身的TA,我无数次的向往能打出几行属于自己的代码.为了跟上时代的步伐,也为了能更加深入TA这个职业, ...
- python中text函数的语法_Python语法大全(持续更新中ing)
1.type()函数可以返回任何Python定义的数据类型. Python提供了一些数字类型转换函数:int().long().float().complex().整数.长整数和浮点数可以通过comp ...
- Python学习小甲鱼视频做的笔记(持续更新中)
Python BIF :Built-in functions(内建函数) Python与大多数其他计算机语言的做法稍有不同,他并不是把值存储在变量中,而更像是把名字贴在值的上边. 在使用变量之前,必须 ...
- Java基础细节(持续更新中)
一.JDK 和 JRE 二.开发步骤 步骤: 1. 将 Java 代码编写到扩展名为 .java 的文件中. 2. 通过 javac 命令对该 java 文件进行编译. 3. 通过 java 命令对生 ...
- 我学习 Java 的历程和体会(写给新手看,欢迎老司机批评和建议,持续更新中)
我学习 Java 的历程和体会(写给新手看,欢迎老司机批评和建议,持续更新中) 最初写这篇文章的时候,是在今年的 9 月中旬.今天,我想再写写这将近两个多月以来的感受. 在今年的 10 月我来到北京求 ...
- 面试JAVA常被问到的问题(持续更新中)
引言 有的面试会被问到有没有写博客,这时候我尴尬,不知道怎么回答,所以这篇文章仅仅是把我面试JAVA的遇到的问题记录下来而已,也算是我写博客迈出的第一步,起码,以后被问到:有没有写博客?我可以回答,我 ...
- 面试1:Java、微服务、架构常见面试题(持续更新中)
Java.微服务.架构常见面试题(持续更新中) 文章目录 Java.微服务.架构常见面试题(持续更新中) ==**Java**== 1.Java概述 (1)JVM.JRE和JDK (2)Java特点 ...
最新文章
- 啥?Transformers又来刷CV的榜了?
- android横竖屏切换生命周期
- P2286 [HNOI2004]宠物收养场
- LINUX下使用https访问站点
- SoapUI 测试http接口实战
- 05_Grafana的安装和Influxdb数据源配置
- 地震勘探英文专业文章中的经典句子(1)
- 什么是 ARM 架构处理器?
- 成功的人和不成功的人最大的区别
- nltk 中的 sents 和 words
- 数学连乘和累加运算符号_2020中考数学 初中数学有理数计算(干货)
- HDOJ--1203--I NEED A OFFER!
- Python import其他文件夹的文件
- SAP接口编程 之 JCo3.0系列:JCoDestination
- OpenBSD 7.2版发布 新增苹果M2芯片和高通骁龙8cx芯片组的支持
- php写前端还是nodejs,javascript - 新手想在短期内写一个个人博客,是用php还是用nodejs?...
- s32k144 isystem linux,S32K144之时钟配置
- java postgresql date_javapostgresql时区总结
- BMFont制作字体
- 外国人最习惯用的社交软件有哪些?