好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

Java与Scala创建List与Map的实现方式

Java与Scala创建List与Map

?

1

2

3

4

5

6

7

//Java

List<String> languages = new ArrayList<>();

Map<String, Class> mapFields = new HashMap();

    

//Scala

val languages = new util.ArrayList[String]   

val mapFields= new util.HashMap[String, Class]

Java自定义map与scala map对比

1. 背景

在学习scala过程中,不可避免需要将java与scala对比,本文就是基于scala的map,使用java进行实现 jdk1.8中,引入了Stream、lambda表达式,这让java也可以支持函数式编程。

2. java代码

2.1 自定义实现的map

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

package com.doit.udf;

import java.util.ArrayList;

import java.util.Arrays;

import java.util.List;

/**

  * @author hulc

  * @slogan: just do it

  * @date 2020/9/13 21:16

  */

public class UserDefineFunc {

     public static void main(String[] args) {

         test1();

     }

     private static void test1() {

         // 使用java来实现scala中针对集合的map、reduce、filter函数的效果

         List<Integer> list = new ArrayList<>();

         list.addAll(Arrays.asList( 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ));

         MyList<Integer> integers = new MyList<Integer>(list);

         // 使用匿名内部类方式进行自定义map方法调用

         List<Object> list1 = integers.map( new MyMapFunction() {

             @Override

             public <String, K> String map(K k) {

                 if (k instanceof Integer) {

                     Integer i = (Integer) k;

                     i += 10 ;

                     return (String) ( "" + i);

                 }

                 return null ;

             }

         });

         for (Object o : list1) {

             System.out.println(o.toString());

         }

     }

}

class MyList<T> extends ArrayList<T> {

     private List<T> words;

     public MyList(List<T> words) {

         this .words = words;

     }

     public List<Object> map(MyMapFunction function) {

         List<Object> ts = new ArrayList<>();

         for (T t : words) {

             Object map = function.map(t);

             ts.add(map);

         }

         return ts;

     }

}

interface MyMapFunction {

     // map就是一个转换函数,输入一个K,转换为一个T

     <T, K> T map(K k);

}

2.2 使用jdk的Sream进行函数式处理

?

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

private static void test2() {

         List<Integer> list = new ArrayList<>();

         list.addAll(Arrays.asList( 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ));

         // 将list转换为Stream,再进行处理,这时候就可以使用函数式进行处理

         Stream<Integer> integerStream = list.stream();

         Stream<String> stringStream = integerStream.map(w -> {

             w += 10 ;

             return "" + w;

         });

         // 遍历打印

         Object[] toArray = stringStream.toArray();

         for (Object o : toArray) {

             System.out.println(o.toString());

         }

     }

以上为个人经验,希望能给大家一个参考,也希望大家多多支持。

原文链接:https://blog.csdn.net/weixin_42034217/article/details/99579822

查看更多关于Java与Scala创建List与Map的实现方式的详细内容...

  阅读:14次