1. 程式人生 > >Java8函數式編程

Java8函數式編程

com lam 處理 pos ali map span china 不可

1、什麽是函數式編程?

函數式編程的核心是:在思考問題時,使用不可變值和函數,函數對一個值進行處理,映射成另一個值。

2、Lambda表達式的學習

要點:Lambda表達式是一個匿名方法,將行為像數據一樣傳遞,常見結構如下:BinaryOperator<Integer> add = (x,y)->x+y。

3、流:常見的流操作

3.1、collect(toList())

 //及早求值方法
 long count = artists.stream().filter(a->a.isFrom("china")).count();
 long count2 = artists.stream().filter(b->b.getName().equals("TTG")).count();
 
long count3 = artists.stream() .filter(a->{    System.out.println(a.getName());    return a.isFrom("china"); }) .count();

List<String> collected = Stream.of("a","b","c").collect(Collectors.toList());
String collectedStr = JSONArray.toJSONString(collected);
boolean
isequal = collected.equals(Arrays.asList("a","b","c"));

3.2、map

        //2.map
        List<String> str = Stream.of("a","b","c")
                .map(s -> s.toUpperCase())
                .collect(Collectors.toList());
        String realStr = JSONArray.toJSONString(str);
        boolean isSame = realStr.equals(Arrays.asList("A","B","C"));

3.3、filter

        //3.filter
        List<Object> str2 = Stream.of("abc","1abc","abc1")
                .filter(s -> isDight(s.charAt(0)))
                .collect(Collectors.toList());
        String rStr2 = JSONArray.toJSONString(str2);

3.4、flatMap

 //flatMap:flatMap 方法可用 Stream 替換值,然後將多個 Stream 連接成一個 Stream
 List<String> str3 = Stream.of(Arrays.asList("a","b","c"),Arrays.asList("d","e"))
                .flatMap(stringList -> stringList.stream())
                .collect(Collectors.toList());
  String rStr3 = JSONArray.toJSONString(str3);

3.5、max和min

//max min
List<Track> tracks = Arrays.asList(new Track("Bakai", 524),
    new Track("Violets for Your Furs", 378),
    new Track("Time Was", 451));
Track shortTrack =             
    tracks.stream().min(Comparator.comparing(track>track.getLength()))
    .get();

3.6、整合+通用模式

  //reduce
        //1.累加
        int count4 = Stream.of(1,2,3)
                .reduce(0,(acc,res)->acc+res);

        //整合
        Album album = null;
        Set<String> orgin = album.getMusicians()
                .filter(artist -> artist.getName().startsWith("The"))
                .map(artist -> artist.getNationality())
                .collect(Collectors.toSet());
        System.out.println(count4);

        int totalMembers = 0;
        for (Artist artist : artists) {
            Stream<Artist> members = artist.getMembers();
            totalMembers += members.count();
        }

    }

Java8函數式編程