精华内容
下载资源
问答
  • lambda 批量修改
    2017-04-12 11:46:14

    目录

    介绍——Java 8

    第一部分——Java中的Lambda表达式

    第二部分——默认方法

    第三部分——批量数据操作

    总结——TL;DR


    介绍——Java 8

    Java 8 的发布实在是让人期待已久,虽然在这一过程中发布delay了些时日,很多人相信他们的等待是值得的。

    主要因为有三个新增的地方:【Lambda表达式】、【默认方法】和【批量数据操作】。

    如果你是第一次听说这些名词,请到Project Lambda查看在java8中即将到来的话题和java开发者最期待的功能。

    驱动lambda特性产生的原因是什么呢?是硬件向着多核发展的趋势。芯片设计在遇到瓶颈后走向了并行设计,而软件开发人员必须找到一个更好的方式来利用底层硬件的功能。对于应用开发者来说,尤其是java开发者,需要简单可并行库来让程序更加有效率。从集合并行化就能明显看出这一改进的开始。事实证明,lambda表达式在提高代码可读性和语言表现上非同凡响。


    还没认识java8前,我们可能这样写代码:

    List persons = asList(new Person("Joe"), new Person("Jim"),
    new Person("John"));
    for(Person person : persons) {
    doSomething(person);
    }

    而今,我们可以用更简洁的方式描述相同的操作:

    List persons = asList(new Person("Joe"), new Person("Jim"), new
    Person("John"));
    persons.forEach(this::doSomething);
    所有加入java8的 特性都涉及多核编程和并发库。

    接下来将介绍三大特性:

    Lambda表达式:lambda语法,SAM类型,函数式接口

    默认方法:是什么,为什么吗,怎么做

    批量数据操作:新的方式进行数据处理

    如果你想查看Java 8的源码,请访问http://jdk8.java.net

    第一部分——Java中的Lambda表达式



    更多相关内容
  • 最近要做一个初始版的数据仓库项目,有一大批的MYSQL基础数据要通过整合后写入到ES,有部分数据量非常庞大,单线程批量写入会耗时很久,就想到了使用线程池来多线程做写入操作。 这个写法不要局限于我这个应用场景...

    最近要做一个初始版的数据仓库项目,有一大批的MYSQL基础数据要通过整合后写入到ES,有部分数据量非常庞大,单线程批量写入会耗时很久,就想到了使用线程池来多线程做写入操作。

    这个写法不要局限于我这个应用场景,别的应用场景也可以修改一下里面的逻辑。

    java版本要求在 1.8以上

    附代码:

    import org.apache.commons.collections.CollectionUtils;
    
    import java.util.List;
    import java.util.concurrent.ExecutorService;
    import java.util.concurrent.Executors;
    
    /**
     * 批量多线程执行写入任务
     */
    public class BatchThreadSave {
    
        /**
         * 批量多线程执行写入任务
         * @param action 返回的截取数据表  自行写操作方法
         * @param dataList 总数据表
         * @param threadCount 需要的线程总数  0 < threadCount < 11
         * @param <F> 指定数据表泛型
         */
        public static <F> void save(Executor<? super List<F>> action, List<F> dataList, int threadCount) {
            if (CollectionUtils.isEmpty(dataList)) {
                return;
            }
            if (threadCount < 1 || threadCount > 10) {
                return;
            }
            int threadSize = dataList.size() / (threadCount - 1);
            // 总数据条数
            int dataSize = dataList.size();
            // 分段数
            int threadNum = dataSize / threadSize + 1;
            // 创建一个线程池
            ExecutorService exec = Executors.newFixedThreadPool(threadCount);
            // 定义一个任务集合
            List<F> cutList = null;
            // 确定每条线程的数据
            try {
                for (int i = 0; i < threadNum; i++) {
                    if (i == threadNum - 1) {
                        cutList = dataList.subList(threadSize * i, dataSize);
                    } else {
                        cutList = dataList.subList(threadSize * i, threadSize * (i + 1));
                    }
                    List<F> finalCutList = cutList;
                    exec.execute(() -> {
                        action.runAction(finalCutList);
                    });
                }
            } catch (Exception e) {
                e.printStackTrace();
            } finally {
                // 关闭线程池
                exec.shutdown();
            }
        }
    
        public interface Executor<T extends List> {
            void runAction(T t);
        }
    
    
    
    
    }

    那该怎么用呢?

    public void buildUserIndex() {
            List<User> users = userMapper.findAll();
            log.info("共获取到用户:" + users.size());
    
            BatchThreadSave.save(finalCutList -> {
                int j = 0;
                for (User user : finalCutList) {
    
                    j++;
                    log.info(Thread.currentThread().getName() + "   当前执行到" + user.getId() + "  剩余:" + (finalCutList.size() - j));
    
                    //finalCutList 这里就是被截取后的数据, 只管写后面的实现
                    //这里执行你的业务逻辑就行了  比如保存  数据处理等等
                    
                    
                }
            }, users, 10);
    
        }

     

    展开全文
  • 后来就弄了一个for循环,循环每1行,然后对每一行使用.apply()方法调用lambda函数进行转换,数据就正常显示,虽然用循环感觉比较笨,但还是开心,解决了问题。毕竟现在电脑配置那么高,不太需要考虑程序效率,能把...

    我有一个应用,需要使用pandas去mysql数据库里用pd. read_sql方法读取数据,进行一定处理后通过数据可视化组件Pyecharts在网页上进行可视化展示,图形为折线图,在显示时发现有些系列(series)的值不显示,查看pyecharts网页端的JavaScript脚本代码,发现Series的值都显示为null,后来查了资料,发现是pandas的数值类型有些跟pyecharts不兼容,pyecharts官网是这么说的:

    Note: 在使用 Pandas&Numpy 时,请确保将数值类型转换为 python 原生的 int/float。比如整数类型请确保为 int,而不是 numpy.int32

    在网上查了很多资料,比如直接使用df.astype(‘int’)对整个数据表进行转换,或者编写自定义函数然后调用df.apply()方法,都是报错,因为我的pandas原始数据里面有int,object等不同的数据类型,不能直接转换。后来就弄了一个for循环,循环每1行,然后对每一行使用.apply()方法调用lambda函数进行转换,数据就正常显示,虽然用循环感觉比较笨,但还是开心,解决了问题。毕竟现在电脑配置那么高,不太需要考虑程序效率,能把问题解决就行了。

    核心代码如下:

    #从数据库读取数据
    df=pd.read_sql(sql=sql,con=conn,index_col="日期",coerce_float=False)
    #折线图
    line = Line(init_opts=opts.InitOpts(width="1200px",height = "600px"))
    line.add_xaxis(df.columns.tolist())        #一定要加tolist()方法,不然会没有任何内容。
    
    #设置Y轴反转,X轴朝下,不用对其零值
    yaxis_opts=opts.AxisOpts(is_inverse= True,is_show=True,axisline_opts=opts.AxisLineOpts(is_on_zero=False)))
    
    for i in range(0,df.shape[0],1):            #轮循df里的所有行,添加到折线图。
      series_name = df.iloc[i].name   #系列名称
      y_axis_value=df.iloc[i].apply(lambda x: x.astype('float') if x is not None else x)    #这里把所有非空值强行转换为float
      line.add_yaxis(series_name=series_name, y_axis=y_axis_value,label_opts=opts.LabelOpts(is_show=True),
            linestyle_opts=opts.LineStyleOpts(width=2),)
            #添加Y轴数据
    
    展开全文
  • 我们经常需要对一个集合做一些自定义的修改,而C#又不允许使用foreach或者for修改集合内容,那么下面我介绍三种方式实现修改集合的某个属性、字段的值,用起来简洁方便,亲测有效。下面有实体类SelectOption 实现的...

    【亲测有效】C# 使用lambda表达式修改集合的某个属性、字段的值

    前言:我们通常在开发的时候会面对各种需求,而我们又喜欢写代码的时候可以简洁、高雅、高效率。lambda表达式的出现正好能够帮助我们减少了一定的代码量,提高写代码的效率。

    正文
    我们经常需要对一个集合做一些自定义的修改,而C#又不允许使用foreach或者for修改集合内容,那么下面我介绍三种方式实现修改集合的某个属性、字段的值,用起来简洁方便,亲测有效。

    下面有实体类SelectOption

    public class SelectOption
    {
        public string Title
        {
        	get;set;
        }
        public object Value
        {
        	get;set;
        }
    }
    

    实现的关键代码:

    //实例化泛型集合
    List<SelectOption> selectOptions = new List<SelectOption>();
    //加入测试数据1
    selectOptions.Add(new SelectOption()
    {
        Title = "标题1",
        Value = "001"
    });
    //加入测试数据2
    selectOptions.Add(new SelectOption()
    {
        Title = "标题2",
        Value = "002"
    });
    
    //第一种方式,使用Select
    selectOptions = selectOptions.Select(c =>
    {
        c.Title = "测试:" + c.Title;
        return c;
    }).ToList();
    
    //第二种方式,使用ForEach
    selectOptions.ForEach(item =>
    {
        item.Title = "测试:" + item.Title;
    });
    
    //第三种方式,使用FindAll
    selectOptions = selectOptions.FindAll(delegate(SelectOption obj) {
        obj.Title = "测试:" + obj.Title;
        return obj != null;
    });
    

    总结:三种实现方式都是可以在方法体里面加入逻辑判断代码,看个人喜好使用哪一种方式都行。

    写完收工。

    展开全文
  • 背景:接上一章,进一步增强功能,实现批量处理的功能。 import openpyxl import os # 定义一个字典 my_dict = {'dth1':'代替换1' ,'dth2':'代替换2' ,'dth3':'代替换3' } def change_column_name(path,my...
  • public class testDemo { public List objectTest(){ List deployVOList = new ArrayList<>(); for(int i=0; i<5; i++){ DeployVO deployVO = new DeployVO();...deployVO.setDeployId(“1”+i);...
  • IEnumerable<Rect> rectlist3 = rectlist.Select(rect =>newRect(rect.X + 2000, rect.Y, rect.rect.Width, rect.rect.Height)); 转载于:https://www.cnblogs.com/gaoxianzhi/p/4084328.html
  • 例: 一张名为test的表,表中有Id,Name两个字段,我要通过Id对应去修改Name值,下面这条sql语句能转吗?谢谢 UPDATE test SET name = CASE id WHEN 1 THEN 'Name1' WHEN 2 THEN 'Name2' WHEN 3 THEN 'Name3' END ...
  • mybatis使用lamda风格的批量更新(^_^)

    千次阅读 2019-02-14 16:08:54
    mybatis批量操作 常用的做法如下代码所示: // UserDao.java /** * 批量插入 */ int batchInsert(@Param("users") List&lt;User&gt; users); // UserDao.xml &lt;insert id="batch...
  • python批量修改文件名

    2022-06-12 01:45:54
    二、python批量修改文件名(按顺序) 1.源码 提示:使用os.listdir出现乱序,即修改文件名的时候不按照文件排列的顺序,例如os.listdir排列的顺序是按照例如:1,10,11,2,20,21…的顺序,想得到的正常顺序:1,2,...
  • lambda是java1.8的一个新特性,可以简化一些代码 lambda 表达式的语法格式如下: (parameters) -> expression 或 (parameters) ->{ statements; } 理解lambda之前我们首先应该理解一个什么叫做函数式接口。 ...
  • var list2 = list.Select(x => { x.Info = x.Info.Trim(new char[] { ':', ':' }); return x; }).ToList(); 注意有{}: x => { x.Info = x.Info.Trim(new char[] { ':', ':' }); return x;...
  • 测试(批量)更新与(批量)插入

    千次阅读 2021-11-13 22:12:18
    文章目录更新新增 更新 mybatis-plus更新: ...批量更新,service层 继承 ServiceImpl ,其中的 updateBatchById 是批量更新(它里面还是一条一条更新)。 LambdaQueryWrapper<User> wrapper = new LambdaQueryWr
  • LambdaUpdateWrapper 批量删除
  • 本文主要介绍了Lambda表达式和Java集合框架的相关知识,具有很好的参考价值。下面跟着小编一起来看下吧
  • 复旦大学2015--2016学年第二学期(15级)高等代数II期末考试第六大题解答六.(本题10分) 设 $n$ 阶复方阵 $A$ 的特征多项式为 $f(\lambda)$, 复系数多项式 $g(\lambda)$ 满足 $(f(g(\lambda)),g'(\lambda))= ......
  • Linux下批量修改文件及文件夹所有者及权限 Linux下批量修改文件及文件夹所有者及权限需要使用到两个命令,chmod以及chown 例:对/opt/Oracle/目录下的所有文件与子目录执行相同的权限变更: chmod -R 700 /opt ......
  • 为引入Lambda表达式,Java8新增了java.util.funcion包,里面包含常用的函数接口,这是Lambda表达式的基础,Java集合框架也新增部分接口,以便与Lambda表达式对接。 首先回顾一下Java集合框架的接口继承结构: 上...
  • 我们期待了很久lambda为java带来闭包的概念,但是如果我们不在...现有接口迁移成为lambda风格的问题已经通过default methods解决了,在这篇文章将深入解析Java集合里面的批量数据操作解开lambda最强作用的神秘面纱。
  • 比较下面批量修改dataframe列名的两种方式: >>> import pandas as pd 第1种方式: >>> df = pd.DataFrame({'Weight':[45, 88, 56, 15, 71], 'Name':['Sam', 'Andrea', 'Alex', 'Robin', 'Kia'],...
  • Lambda表达式

    2022-05-02 14:14:16
    一、Lambda初识 我们知道,在Java中,接口是不能实例化的,但是接口对象可以指向它的实现类对象。如果接口连实现对象都没有呢?那还可以使用匿名类的方式,如下: public class JavaTest { public static void ...
  • kotlin学习笔记——Lambda表达式

    千次阅读 2022-03-23 15:04:51
    直白的说,Lambda就是一小段可以作为参数传递的代码。 一般向某个函数传参都只能是变量,而Lambda可以传一段代码。 类似python中的map、reduce函数,允许传入Lambda表达式,ketlin的集合中也有很多类似的函数式API ...
  • Lambda作为函数式编程中的基础部分,在其他编程语言中早就广为使用,但在Java领域中发展较慢,直到java8,才开始支持Lambda。网上关于Lambda的教程很多,今天小编给大家分享一篇快速入手Lambda的教程。
  • pandas批量修改列值_pandas速查手册

    千次阅读 2020-11-20 00:08:31
    'one'):用‘one’代替所有等于1的值 s.replace([1,3],['one','three']):用'one'代替1,用'three'代替3 df.rename(columns=lambda x: x + 1):批量更改列名 df.rename(columns={'old_name': 'new_ name'}):选择性...
  • 常用的lambda操作,包括list转list,list转map,过滤,排序等操作
  • 在之前批量修改文件名的时候出现的问题是使用os.listdir出现乱序,即修改文件名的时候不按照文件排列的顺序,导致了不必要的麻烦。 os.listdir排列的顺序是按照例如:1,10,11,2,20,21…的顺序 想达到的正常顺序...
  • 主要介绍了Java8新特性lambda表达式有什么用,着重以实例讲解lambda表达式,需要的朋友可以参考下
  • python批量处理应用

    千次阅读 2021-12-07 16:40:34
    一、python批量修改文件名 提示:待修改的文件夹下只能包含需要修改的文件,然后更改源码里面的路径即可。 代码如下(示例): #批量修改文件名 #批量修改图片文件名 import os import re import sys def renameall...
  • 本文将主要介绍如何利用Lambda架构来跟踪数据实时更新的项目实现,以一个新闻服务功能为例。当前股票市场的交易者可以了解丰富的股票交易信息。从金融新闻到传统的报纸和杂志再到博客和社交媒体,汇聚着海量的数据,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 11,053
精华内容 4,421
关键字:

lambda 批量修改