zoukankan      html  css  js  c++  java
  • java8的stream操作

     这是今天的最后一篇了,一口气发了七八篇吧,从网上copy都没有这么快的速度,这些零零碎碎的总结,都是平时工作常用的一些知识点,我一般都喜欢用印象笔记记下来或者用个txt记下来,后来发现知识还是分享出来,交流多了你会有额外的收获。java8也出来好几年了,切切实实感受到了她带来的便利,就来一个java排序来说,以前吭叽吭叽十几二十行代码才能实现,现在一行代码搞定。以前操作文件,总是担心资源,上个项目通过解析、清洗3到4G的csv文件,来获取我们自己想要的宝贵数据,java8的读写,真的是让你用了就爱不释手,hahah,闲话不多说,上代码

    import com.google.common.collect.Maps;

    import java.util.Arrays;
    import java.util.List;
    import java.util.Map;
    import java.util.Optional;
    import java.util.stream.Collectors;

    import static java.util.stream.Collectors.groupingBy;

    /**
    * java8stream
    *
    * @author nanfengxiangbei
    * @date 2020/9/27 10:20
    */
    public class StreamDemo002 {

    public static void main(String[] args) {
    List<Dish> menu = Arrays.asList(
    new Dish("pork", false, 800, DishType.MEAT),
    new Dish("beef", false, 700, DishType.MEAT),
    new Dish("chicken", false, 400, DishType.MEAT),
    new Dish("french fries", true, 530, DishType.OTHER),
    new Dish("rice", true, 350, DishType.OTHER),
    new Dish("season fruit", true, 120, DishType.OTHER),
    new Dish("pizza", true, 550, DishType.OTHER),
    new Dish("prawns", false, 300, DishType.FISH),
    new Dish("salmon", false, 450, DishType.FISH),
    new Dish("salmon", false, 420, DishType.FISH)
    );

    List<Dish> gt300Calories = menu.stream().filter(dish -> dish.getCalories() > 300)
    .filter(Dish::getVegetarian)
    .collect(Collectors.toList());

    // gt300Calories.forEach(System.out::println);
    List<String> length = menu.stream().filter(dish -> dish.getCalories() > 300)
    .map(Dish::getName)
    .map(s -> s.split(""))
    .flatMap(Arrays::stream)
    .distinct()
    .collect(Collectors.toList());
    // length.forEach(System.out::println);

    List<Integer> arrsA = Arrays.asList(1, 2, 3);
    List<Integer> arrsB = Arrays.asList(4, 5);

    List<int[]> lists = arrsA.stream()
    .flatMap(i -> arrsB.stream()
    .filter(j -> (i + j) % 3 == 0)
    .map(j -> new int[]{i, j}))
    .collect(Collectors.toList());

    Optional<Dish> dish = menu.stream()
    .filter(Dish::getVegetarian)
    .findAny();

    int sum = menu.stream().filter(calories -> calories.getCalories() > 300)
    .map(Dish::getCalories)
    .reduce(0, Integer::sum);
    // System.out.println(sum);

    Map<String, List<Dish>> maps = menu.stream()
    .collect(groupingBy(Dish::getName));
    // System.out.println(maps);

    Map<DishType, Integer> maps1 = menu.stream()
    .collect(
    groupingBy(Dish::getType,
    Collectors.reducing(0, Dish::getCalories, Integer::sum))
    );
    // maps1.forEach((k,v) -> System.out.println(k + " : " + v));

    Map<DishType, Double> maps2 = menu.stream()
    .collect(
    groupingBy(Dish::getType,
    Collectors.averagingInt(Dish::getCalories))
    );
    // maps2.forEach((k,v) -> System.out.println(k + " : " + v));

    }
    }

    --------------------------java8文件操作(这一个,应该就很详细了吧,haha,业务代码不能给太多)

    /**
    * 生成非融合包与观看数据的整合文件
    *
    * @param rhbRsplMap 融合包关联关系map
    * @param ptbRsplMap 普通产品关联关系map
    */
    public void dealWatchDataRlFusionData(Map<String, Object> rhbRsplMap,
    Map<String, Object> ptbRsplMap,
    String inputFilePath,
    String inputFileName,
    String outFile) {
    try {
    Path filePath = Paths.get(inputFilePath, inputFileName);
    // 读
    Stream<String> lineStream = Files.lines(filePath);
    Stream<String> s1 = lineStream.filter(s -> {
    String[] items = s.split("\|");
    String contentId = items[1].trim();
    return ptbRsplMap.get(contentId) != null;
    });

    Stream<String> s2 = s1.map(s -> {
    String[] items = s.split("\|");
    String account = items[0].trim();
    String contentId = items[1].trim();
    String start = items[2].trim();
    String end = items[3].trim();
    StringBuilder sb = new StringBuilder(account).append("|").append(contentId).append("|").append(start).append("|").append(end).append("|");

    String ptProdCode;
    if (ptbRsplMap.get(contentId) != null) {
    ptProdCode = (String) ptbRsplMap.get(contentId);
    } else {
    ptProdCode = (String) rhbRsplMap.get(contentId);
    }

    sb.append(StringUtils.isEmpty(ptProdCode) ? "" : ptProdCode);
    return sb.toString();
    });

    // 生成非融合包与观看数据的整合文件
    File newFile = new File(outFile);

    List<String> lineList = new ArrayList<>();
    // 批量写
    s2.forEach(s -> {
    try {
    lineList.add(s);
    if (lineList.size() == 200000) {
    FileUtils.writeLines(newFile, lineList, true);
    lineList.clear();
    }
    } catch (Exception ex) {
    logger.error("BaseFieldHandle.dealWatchDataRLFusionData异常ex", ex);
    }
    });
    if (lineList.size() > 0) {
    FileUtils.writeLines(newFile, lineList, true);
    }
    } catch (Exception e) {
    logger.error("BaseFieldHandle.dealWatchDataRLFusionData异常", e);
    }
    }
    知人者智,自知者明,胜人者有力,自胜者强。
  • 相关阅读:
    制作你的第一个HTML 5游戏
    拒绝臆想,让我们脚踏实地做设计!
    HTML 5或者Silverlight?
    如何替换掉回车键
    杀死团队的武器与修复团队的方法
    Google趋势中显示jQuery是最流行的JavaScript框架
    关于脚本载入器的思考
    简化Web开发的12个HTML5CSS框架
    线框图(demo草图)制作的总结
    江苏南通周边经纬度
  • 原文地址:https://www.cnblogs.com/nanfengxiangbei/p/14190187.html
Copyright © 2011-2022 走看看